当我构建一系列张量时, 的操作函数tensorflow,例如tf.transpose(~)或tf.split(~)返回错误。代码window = 60len_feat= 15X = tf.placeholder(tf.float32, shape=[None, window, len_feat]X = tf.transpose(X, (1,0,2))tf.Session().run(X, feed_dict={X: x}) #x has a shape (100, 60, 15)错误"shape (100, 60, 15) can't be reshaped into (60, ?, 15)"但是,如果我构建一个任意函数,例如:X = tf.placeholder(tf.float32, shape=[None, window, len_feat])def fun(X): X = tf.transpose(X, (1,0,2)) ...它运作良好。是什么造成这种差异?
1 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
在第一个片段中,您将通过转置的结果覆盖占位符。这不再是占位符。
请注意,它feed_dict允许您替换任何张量的值,而不仅仅是占位符。但是,因为您的占位符的形状为 [None, 60, 15],所以转置的形状为 [60, None, 15]。因此,形状为 [100, 60, 15] 的数据无法放入此张量中,因为第一个维度不匹配。
您可以通过重命名变量来简单地修复第一个片段。例如
window = 60
len_feat= 15
X = tf.placeholder(tf.float32, shape=[None, window, len_feat]
Y = tf.transpose(X, (1,0,2))
tf.Session().run(Y, feed_dict={X: x}) #x has a shape (100, 60, 15)
这应该工作得很好。由于局部变量和全局变量之间的区别,您定义函数的第二个示例可能会起作用。很难说,因为你没有提供完整的代码。
添加回答
举报
0/150
提交
取消
