Tensorflow可变批量大小,可变重塑和重量

时间:2017-08-29 22:10:45

标签: tensorflow

我正在尝试构建一个具有可变批量大小,可变整形和可变重量形状的图形。我正在使用tensorflow 1.3.0。

使用下面的代码, tf.get_variable 会抛出 TypeError:int()参数必须是字符串或数字,而不是'Tensor' pool2 在代码中的其他位置定义。

# declare placeholder for variable batch size
images_ph = tf.placeholder(tf.float32, shape=[None, 64, 64, 1])
# code for 2 layers of convolution, normalization and max pooling
# reshape to perform, one matrix multiply
reshape = tf.reshape(pool2, [tf.shape(images_ph)[0], -1])
dim = tf.shape(reshape)[1]
var = tf.get_variable('name', [dim, 384], validate_shape=False)

我还尝试用 dim 替换“正确”类型,如下所示:

dim = reshape.get_shape()[1]

dim 等于并抛出 ValueError:必须完全定义新变量(local3 / xpto)的形状,而是(?) ,384)。

3 个答案:

答案 0 :(得分:1)

get_variable的第二个参数采用整数或字符串,但正如错误所示,您已经给它一个张量[dim, 384]

请参阅:https://www.tensorflow.org/api_docs/python/tf/get_variable

答案 1 :(得分:0)

tf.shape会返回一个张量,因此[dim, 384]中的 dim 是张量;这是一个需要的int。

尝试dim = reshape.get_shape().as_list()[1] #output属于int类型

答案 2 :(得分:0)

感谢大家尝试提供帮助。

鉴于我将 pool2 的输出展平以仅执行一个matmul,解决方案是明确计算重塑的第二维的长度。这是在第1行和第2行计算的,其中第一行的 [1:] 偏移量来自变量批量大小。

我无法使用重塑形状,未指定所有尺寸。

pool2_shapes = pool2.get_shape().as_list()[1:]
pool2_features_length = reduce(lambda x, y: x*y, pool2_shapes)
reshape = tf.reshape(pool2, [tf.shape(images)[0], pool2_features_length])