yunhai_luo:
之前@Googler的帖子讨论过不同尺寸图片训练的问题,也提到过至少单张训练是可以的。不知道楼主是什么情况,是否方便详细说说或者分享一些示例代码?不同尺寸图片单张训练的假想代码:
import numpy as np
import tensorflow as tf
x = tf.placeholder(tf.float32, shape=[None, None, None, 1])
y_ = tf.placeholder(tf.float32, shape=[None, None, None, 3])
y = tf.layers.conv2d(x, 8, [3, 3], padding='same', activation=tf.nn.relu)
y = tf.layers.conv2d(y, 16, [3, 3], padding='same', activation=tf.nn.relu)
predict = tf.layers.conv2d(y, 3, [3, 3], padding='same', activation=tf.nn.relu)
loss = tf.losses.mean_squared_error(labels=y_, predictions=predict)
widths = np.random.randint(3, 1024, size=10)
heights = np.random.randint(3, 768, size=10)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for w, h in zip(widths, heights):
input_x = np.random.rand(1, w, h, 1) * 255
output = np.random.rand(1, w, h, 3) * 255
l = sess.run(loss, feed_dict={x: input_x, y_: output})
print('Loss {} for a {}x{} image'.format(l, w, h))
leizerliu:
感谢你提供的链接,不过,实现任意大小的单张图片的训练,我不知该怎么去实现。。。
我的理解就是全卷积数据网络对输入输出的大小没要求,在训练好模型之后,可以实现对任意尺寸大小的数据进行预测。但是,在训练模型的时候,我不清楚该怎么实现:在不改变输入数据大小的情况下进行训练。如果不用对数据进行固定大小的处理,这样就可以简化了一些步骤。
yunhai_luo:
呃,我不是很明白你所谓的“不清楚该怎么实现”具体是指什么,不好意思。假设你的训练集里的每张图片都是大小不同的,那你就一张一张放进模型训练就好了,反正你模型中全是卷积层,没啥尺寸要求。比如我这个例子,虽然很傻,但是w和h都是随机的,每张都不同,一张张放进去算loss都没啥问题的。楼主不方便给代码没关系,但估计得请楼主能再多给些细节。
leizerliu:
你说的整个过程我明白,可能是我的实现有问题,接下来再好好来想想。谢谢你!等我接下来有时间我来整理一下,发个帖子。