我的计算机上有一个图像文件夹,但我不知道如何设置输入图层。这是他们在样本页面上提供的代码。我不确定如何将我的文件夹实现为这种格式。
def main(unused_argv):
# Load training and eval data
mnist = tf.contrib.learn.datasets.load_dataset("mnist")
train_data = mnist.train.images # Returns np.array
train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
eval_data = mnist.test.images # Returns np.array
eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)
答案 0 :(得分:2)
您需要将文件夹中的图像转换为矢量(数字集)以提供给网络。
在上面的mnist示例中,您实际使用的是图像的压缩二进制版本。因此,您的结束不需要预处理(除了将像素缩放到0-1之间)。
假设您在当前工作目录中有一个名为orig.jpg
的RGB图像。
您将该图像加载为
import numpy as np
from PIL import Image
img = Image.open('orig.jpg').convert('RGB')
img = np.array(img)
这将为您提供数字形式的所有图像内容到numpy数组变量。在这种情况下img
。
根据您的问题,您正在实施卷积神经网络,因此您无需将img
变量展平为一维向量。
您可以通过运行
来检查变量的形状np.shape(img)
通常形状为(lenght, width, 3)
使用图像训练模型之前的最后一步,您可能需要对RGB值进行标准化。您可以将img
除以255来实现。这通常可以改善您的优化算法
如果要迭代目录中的完整图像。你可以通过
这样做for filename in os.listdir(directory_name):
if filename.endswith(".jpg"):
# code to extract the values using os.path.join(directory_name,filename)
使用.jpg到np.array迭代并保存所有图像的完整代码如下。
from PIL import Image
import numpy as np
import os.path
length = 128 # pixels in length
width = 128 # pixels in width
imgs = np.empty((0,length, width, 3)) #empty dummy array, we will append to this array all the images
for filename in os.listdir(directory_name):
if filename.endswith(".jpg"):
img = Image.open(os.path.join(directory_name,filename)).convert('RGB')
imgs = np.append(imgs, np.array(img).reshape((1, length, width, 3)), axis=0)
循环完成后,imgs
的形状将为(num_image, length, width, 3)
现在您可以使用此imgs
并使用tf.data.Dataset.from_tensor_slices(....)
构建一些输入管道,也可以直接使用imgs