发新帖

请问如何在全卷积神经网络在训练不同尺寸的样本?

[复制链接]
924 6

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
请问一下各位,在训练全卷积神经网络时,我的样本的尺寸不一样,怎样才能不resize训练样本的情况下,进行训练?或者说,tensorflow支持训练动态的shape吗?
之前使用tf.placeholder,没有指明样本大小,但在feed样本数据的时候,出现:ValueError:setting  an array element with a sequence.照着该文章 https://blog.csdn.net/liuchonge/article/details/77854689 说的办法进行修改,还是没解决问题。
请问各位,tensorflow能否支持训练动态的shape?希望能给出一些参考资料。
我知道答案 回答被采纳将会获得10 金币 + 10 金币 已有6人回答
本楼点评(0) 收起

精彩评论6

yunhai_luo  TF豆豆  发表于 2018-5-13 16:27:30 | 显示全部楼层
之前@Googler的帖子讨论过不同尺寸图片训练的问题,也提到过至少单张训练是可以的。不知道楼主是什么情况,是否方便详细说说或者分享一些示例代码?不同尺寸图片单张训练的假想代码:

  1. import numpy as np
  2. import tensorflow as tf

  3. x = tf.placeholder(tf.float32, shape=[None, None, None, 1])
  4. y_ = tf.placeholder(tf.float32, shape=[None, None, None, 3])

  5. y = tf.layers.conv2d(x, 8, [3, 3], padding='same', activation=tf.nn.relu)
  6. y = tf.layers.conv2d(y, 16, [3, 3], padding='same', activation=tf.nn.relu)
  7. predict = tf.layers.conv2d(y, 3, [3, 3], padding='same', activation=tf.nn.relu)
  8. loss = tf.losses.mean_squared_error(labels=y_, predictions=predict)

  9. widths = np.random.randint(3, 1024, size=10)
  10. heights = np.random.randint(3, 768, size=10)
  11. with tf.Session() as sess:
  12.     sess.run(tf.global_variables_initializer())
  13.     for w, h in zip(widths, heights):
  14.         input_x = np.random.rand(1, w, h, 1) * 255
  15.         output = np.random.rand(1, w, h, 3) * 255
  16.         l = sess.run(loss, feed_dict={x: input_x, y_: output})
  17.         print('Loss {} for a {}x{} image'.format(l, w, h))
复制代码





本楼点评(3) 收起
  • leizerliu感谢你提供的链接,不过,实现任意大小的单张图片的训练,我不知该怎么去实现。。。
    我的理解就是全卷积数据网络对输入输出的大小没要求,在训练好模型之后,可以实现对任意尺寸大小的数据进行预测。但是,在训练模型的时候,我不清楚该怎么实现:在不改变输入数据大小的情况下进行训练。如果不用对数据进行固定大小的处理,这样就可以简化了一些步骤。
    2018-5-13 23:55 回复
  • yunhai_luo呃,我不是很明白你所谓的“不清楚该怎么实现”具体是指什么,不好意思。假设你的训练集里的每张图片都是大小不同的,那你就一张一张放进模型训练就好了,反正你模型中全是卷积层,没啥尺寸要求。比如我这个例子,虽然很傻,但是w和h都是随机的,每张都不同,一张张放进去算loss都没啥问题的。楼主不方便给代码没关系,但估计得请楼主能再多给些细节。
    2018-5-14 05:28 回复
  • leizerliu你说的整个过程我明白,可能是我的实现有问题,接下来再好好来想想。谢谢你!等我接下来有时间我来整理一下,发个帖子。
    2018-5-17 10:56 回复
Googler  TF荚荚  发表于 2018-5-15 14:26:08 | 显示全部楼层
Googler本人来回答此问题。
本人目前只能做到单张图片的训练,原理大概是使用Queue队列将图片单张输入到网络中训练。
如果您有更好方法,欢迎交流。
本楼点评(1) 收起
重庆不热  TF荚荚  发表于 2018-7-3 16:40:04 | 显示全部楼层
应该只要报证不同的图片在模型中不会出错(比如shape不匹配等问题)应该就可以了。
本楼点评(0) 收起
lytensor  TF荚荚  发表于 2018-7-3 17:00:48 | 显示全部楼层
一张一张放进去训练就好了,不影响数据的情况下,也可以做resize、clip的操作把一个批次的图片做到相同尺寸
本楼点评(0) 收起
tensorfyx  TF豆豆  发表于 2018-7-3 17:40:34 | 显示全部楼层
我们目前训练的OCR识别项目都是同一尺寸的,感觉这个问题有点难度,保持关注。
本楼点评(0) 收起
ytcmbjx  TF荚荚  发表于 2018-7-3 18:53:12 | 显示全部楼层
搞成同样尺寸的就可以啊,我是这样搞得。。。
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表