python - Tensorflow CNN训练图像大小不一

标签 python tensorflow deep-learning conv-neural-network deconvolution

我创建了一个深度卷积神经网络来对图像中的单个像素进行分类。我的训练数据将始终具有相同的大小 (32x32x7),但我的测试数据可以是任何大小。

Github Repository

目前,我的模型只能处理相同尺寸的图像。我用过 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 但这超出了问题的范围)。这给您留下了两个选择:

  1. 分桶:您创建多个手动选择大小的多个输入张量,然后在运行时选择正确的分桶(参见示例)。无论哪种方式,您都可能需要第二个选项。 Seq2seq with bucketing

  2. 调整输入和输出图像的大小。 假设图像都保持相同的纵横比,您可以尝试在推理前调整图像大小。不确定为什么要关心输出,因为 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/

相关文章:

python - 如何根据用户权限加载admin.py中的类

python - 如何使用 Python 确定机器在给定所有位置数据的情况下移动的方向?

python - 如何像在 R 中那样在 Python 中绘制 CART 树?

python - 将 CNN 更改为 LSTM keras tensorflow

numpy - 将 PyTorch 变量复制到 Numpy 数组

python - 向自定义 resnet 18 架构添加简单的注意力层会导致前向传递错误

python - 使用 redis 和 python 进行复杂查询

python - tensorflow 中具有权重衰减参数的 SGD

machine-learning - tensorflow.python.framework.errors_impl.InvalidArgumentError : Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_1/MaxPool'

python - 与 GPU 一起使用时,packed_pa​​dded_sequence 会出错