图像增强时的数据拆分
来源:5-9 图像增强实战
慕虎9426780
2019-10-07
在图像增强时对mini batch里的数据拆分成单独的图片用到了x_image_arr = tf.split(x_image, num_or_size_splits=batch_size, axis=0)
这里因为要把拆分成多少张作为参数传入所以在定义图之前预先赋值batch_size=20
但这样在构建图时就要固定batch_size影响模型的泛化。
我看到之前对pooling做padding的时候用到了从tensor里获取shape的方法用在了下面的得到padding填充值的操作中
max_pooling_shape = max_pooling.get_shape().as_list()[1:]
input_shape = x.get_shape().as_list()[1:]
width_padding = (input_shape[0] - max_pooling_shape[0]) // 2
那么既然可以从tensor中获取shapex_image
能不能也用get_shape()
的方法每次获取batch_size的大小呢
我尝试了类似的方法
bs = list(x_image.get_shape())[0]
x_image_arr = tf.split(x_image, num_or_size_splits=bs, axis=0)
结果却得到了这样的错误
ValueError Traceback (most recent call last)
<ipython-input-7-ed0bd47f1056> in <module>
74 # bs = x_image.get_shape().to_list()[0]
75 bs = list(x_image.get_shape())[0]
---> 76 x_image_arr = tf.split(x_image, num_or_size_splits=bs, axis=0)
77 result_x_image_arr = []
...
~Anaconda3libsite-packages ensorflowpythonrameworkconstant_op.py in _dimension_tensor_conversion_function(d, dtype, name, as_ref)
356 _ = as_ref
357 if d.value is None:
--> 358 raise ValueError("Cannot convert an unknown Dimension to a Tensor: %s" % d)
359 if dtype is not None:
360 if dtype not in (dtypes.int32, dtypes.int64):
ValueError: Cannot convert an unknown Dimension to a Tensor: ?
这个错误的意思是说tensor第一维的batch_size不能动态的被解析吗
为什么在前面pooling的padding获取信息不会有这个问题
如何正确的动态获取batch_size呢
写回答
1回答
-
tf里的get_shape方法虽然能获取tensor的维度信息,但是tensorflow是先构建图再去训练的,所以不支持获取动态的维度信息。前面在做padding的时候,虽然也用到了get_shape方法,但是使用的确实已经固定了的后面的维度。在这里,batch_size如果是动态的话,那么get_shape获取到的也是unknown,所以是无法这样操作的。
112019-10-20
相似问题