Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow可变批量大小、可变整形和重量_Tensorflow - Fatal编程技术网

Tensorflow可变批量大小、可变整形和重量

Tensorflow可变批量大小、可变整形和重量,tensorflow,Tensorflow,我试图构建一个具有可变批量大小、可变整形和可变重量形状的图形。我使用的是tensorflow 1.3.0 使用下面的代码,tf.get\u变量抛出一个TypeError:int()参数必须是字符串或数字,而不是“张量”pool2在代码中的其他地方定义 # declare placeholder for variable batch size images_ph = tf.placeholder(tf.float32, shape=[None, 64, 64, 1]) # code for 2 l

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

使用下面的代码,tf.get\u变量抛出一个TypeError:int()参数必须是字符串或数字,而不是“张量”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等于None并抛出一个值错误:必须完全定义新变量(local3/xpto)的形状,但它是(?,384)。get\U variable的第二个参数接受一个整数或字符串,但正如错误所说,您给了它一个张量
[dim,384]


请参阅:

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


尝试
dim=reformate.get_shape().as_list()[1]
#输出为int类型

谢谢大家的帮助

考虑到我将对pool2的输出进行展平以仅执行一次matmul,解决方案是显式计算重塑的第二维度的长度。这是在第1行和第2行上计算的,其中第一行上的[1://strong>偏移量来自可变批量

我无法在所有尺寸都未指定的情况下使用“重塑”

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])

看起来没有定义pool2。pool2没有在代码段中定义,而是在代码的其他地方定义的。谢谢您的评论。我也尝试过这个,但它抛出了另一个错误。请检查更新的问题。您遗漏了
as\u list()
,尽管当列表从维度更改为无类型时,它并不能解决问题。可能我们有不同的版本
a=tf.constant([[1,2,3],[4,5,6]])
dim=a.get_shape()[1]
给我作为输出维度(3)和
type(dim)
不是一个int。但是
dim=a.get_shape().as_list(),[a.get_shape().as_list()[1],2])
。您的变量a为int并已定义。我的变量dim为None,因为我事先不知道维度是什么。感谢您的评论。我也尝试了此操作,但它引发了另一个错误。我认为如果将validate_shape用作False,则可能可以解决此问题。请尝试类似于
var=tf.get_variable的操作('name',tf.shape(restrape))
这将返回一个错误,因为tf.shape(restrape)[1]的类型是张量。
tf.shape
返回张量的形状,而不是张量。请参阅:好的,但我想要的形状不是restrape的形状,而是[None,384]。您可以将
-1
传递给
整形的任何一个维度,以获得“其余部分”,因此只需使用
pool2=tf.respore(pool2,(tf.shape(images)[0],-1])
这不起作用,因为tf.shape(images)[0]没有。这正是我在问题中遇到的。啊,在这种情况下,您可以省去查找
None
形状的工作量,
tf.reforme(pool2,(-1,pool2\u特征长度))
。这不是一个很大的节省,但是如果你问我的话,会让代码更可读。使用-1完全模糊了形状大小的来源。我不同意-它清楚地表明它来自于被重塑的张量的大小,并且每次在这个上下文中使用它都意味着完全相同的事情。这主要是一个样式问题,所以我承认有d意见分歧。