python - 为什么 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))
...
它运作良好。是什么造成了这种差异?
解决方案
在第一个片段中,您将通过转置结果覆盖占位符。这不再是占位符了。
请注意,它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)
这应该工作得很好。由于局部变量和全局变量之间的区别,您定义函数的第二个示例可能会起作用。很难说,因为您没有提供完整的代码。
推荐阅读
- windows - 视窗10 | Powershell 重定向到 Microsoft 商店
- sql - 基于其他选定行中的最大值的一列的 SQL 值
- python - 将 json 插入 postgress 数据库 - 看到 TypeError:列表索引必须是整数或切片,而不是列表
- python - 从导入的文件调用 __main__ 文件中的函数
- jupyter-notebook - OSMnx 不会在 Juypter Notebook 中打开
- android - 示例 Hello world 颤振应用程序构建失败:任务“:app:mergeDebugResources”执行失败
- html - 我不能改变桌子的位置
- firebase - 我想显示从 firebase 登录的用户名
- python-3.x - 将 for 循环与 scikit-learn 决策树一起使用时出现问题
- node.js - Node Js 在每个路径上发送文件