我创建了一个深度卷积神经网络来对图像中的单个像素进行分类。我的训练数据将始终具有相同的大小 (32x32x7),但我的测试数据可以是任何大小。
目前,我的模型只能处理相同尺寸的图像。我用过 tensorflow mnist tutorial广泛地帮助我构建我的模型。在本教程中,我们只使用 28x28 图像。 如何更改以下 mnist 模型以接受任何大小的图像?
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
x_image = tf.reshape(x, [-1, 28, 28, 1])
为了让事情变得更复杂一点,我的模型在需要指定输出形状的地方有转置卷积。我将如何调整以下代码行,以便转置卷积输出与输入大小相同的形状。
DeConnv1 = tf.nn.conv3d_transpose(layer1, filter = w, output_shape = [1,32,32,7,1], strides = [1,2,2,2,1], padding = 'SAME')
最佳答案
不幸的是,无法在 Tensorflow 中构建动态图(您可以尝试使用 fold 但这超出了问题的范围)。这给您留下了两个选择:
分桶:您创建多个手动选择大小的多个输入张量,然后在运行时选择正确的分桶(参见示例)。无论哪种方式,您都可能需要第二个选项。 Seq2seq with bucketing
调整输入和输出图像的大小。 假设图像都保持相同的纵横比,您可以尝试在推理前调整图像大小。不确定为什么要关心输出,因为 MNIST 是一项分类任务。
无论哪种方式,您都可以使用相同的方法:
from PIL import Image
basewidth = 28 # MNIST image width
img = Image.open('your_input_img.jpg')
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.ANTIALIAS)
# Save image or feed directly to tensorflow
img.save('feed_to_tf.jpg')
关于python - Tensorflow CNN训练图像大小不一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47929557/