为什么 tf 操作只能在任意函数中工作?

当我构建一系列张量时, 的操作函数tensorflow,例如tf.transpose(~)或tf.split(~)返回错误。


代码


window = 60

len_feat= 15

X = 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))

    ...

它运作良好。是什么造成这种差异?


jeck猫
浏览 179回答 1
1回答

神不在的星期二

在第一个片段中,您将通过转置的结果覆盖占位符。这不再是占位符。请注意,它feed_dict允许您替换任何张量的值,而不仅仅是占位符。但是,因为您的占位符的形状为 [None, 60, 15],所以转置的形状为 [60, None, 15]。因此,形状为 [100, 60, 15] 的数据无法放入此张量中,因为第一个维度不匹配。您可以通过重命名变量来简单地修复第一个片段。例如window = 60len_feat= 15X = 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)这应该工作得很好。由于局部变量和全局变量之间的区别,您定义函数的第二个示例可能会起作用。很难说,因为你没有提供完整的代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python