Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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的输入[None,9,2](其中None是批处理的) 要对其执行进一步的操作(如matmul),我需要将其转换为[None,18]形状。怎么做 您可以使用动态整形通过tf.batch获取批次维度的值,在运行期间,将整个新维度集计算到tf.restrape。下面是一个在不知道列表长度的情况下将平面列表重塑为方阵的示例 tf.reset\u default\u graph() sess=tf.InteractiveSession(“”) a=tf.placeholder

我有一个对tensorflow的输入
[None,9,2]
(其中
None
是批处理的)


要对其执行进一步的操作(如matmul),我需要将其转换为
[None,18]
形状。怎么做

您可以使用动态整形通过
tf.batch
获取批次维度的值,在运行期间,将整个新维度集计算到
tf.restrape
。下面是一个在不知道列表长度的情况下将平面列表重塑为方阵的示例

tf.reset\u default\u graph()
sess=tf.InteractiveSession(“”)
a=tf.placeholder(dtype=tf.int32)
#获取[9]
ashape=tf.形状(a)
#将列表从第0位切片到第1位
ashape0=tf.slice(ashape[0],[1])
#将列表重塑为标量,即从[9]改为9
ashape0_平面=tf.重塑(ashape0,())
#sqrt不支持int,所以强制转换为float
ashape0_平坦_浮动=tf.至_浮动(ashape0_平坦)
newshape0=tf.sqrt(ashape0\u平面\u浮动)
#将[3,3]Python列表转换为[3,3]张量
newshape=tf.pack([newshape0,newshape0])
#tf.reforme不接受浮点,因此将其转换回int
newshape_int=tf.to_int32(newshape)
a_重塑=tf.重塑(a,新闻形状)
sess.run(a_重塑,feed_dict={a:np.ones((9))})
你应该看到

array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]], dtype=int32)

使用tf.reforme()可以轻松完成此操作,而无需知道批大小

x = tf.placeholder(tf.float32, shape=[None, 9,2])
shape = x.get_shape().as_list()        # a list: [None, 9, 2]
dim = numpy.prod(shape[1:])            # dim = prod(9,2) = 18
x2 = tf.reshape(x, [-1, dim])           # -1 means "all"
最后一行中的
-1
表示整个列,无论运行时的batchsize是什么。你可以从中看到它


更新:shape=[无,3,无] 谢谢@kbrose。对于多个维度未定义的情况,我们也可以使用with

x = tf.placeholder(tf.float32, shape=[None, 3, None])
dim = tf.reduce_prod(tf.shape(x)[1:])
x2 = tf.reshape(x, [-1, dim])
shape()返回可在运行时计算的形状张量。可以看出tf.get_shape()和tf.shape()之间的区别


我还在另一个应用程序中尝试了tf.contrib.layers.flatte()。对于第一种情况,这是最简单的,但它不能处理第二种情况。

我在这个解决方案或Tensorflow中没有看到任何方法
tf.batch
。如果您知道所有其他维度的大小,这很有效,但如果其他维度的大小未知,则不起作用。例如,
x=tf.placeholder(tf.float32,shape=[None,9,None])
Thank@kbrose。我已经更新了案件的答案。@weitang114太棒了!我被重塑困住了,tf.reduce_prod帮我做了这件事。非常感谢你!如果以后将
x2
传递到
动态\u rnn
中,这似乎不起作用。生成
ValueError:输入大小(输入深度)必须通过形状推断进行访问,但saw值无。
flat_inputs = tf.layers.flatten(inputs)