python - Tensorflow:feed_dict 占位符是操作而不是张量
问题描述
我在 python 类中创建了一个图表。初始化程序使我能够创建新图或加载现有图。
如果我通过创建进行初始化,我会创建一个输入占位符:
self.input = tf.placeholder("float", [None, self.input_size], name="x"
然后我可以保存我的图表:
tf.saved_model.simple_save(
self.sess, path, inputs={"x": self.input}, outputs={"encoded": self.encoded
如果我从负载初始化,我首先加载图表
tf.saved_model.loader.load(
self.sess, [tf.saved_model.tag_constants.SERVING], path
)
然后在类中设置我的输入和输出名称
self.input = self.sess.graph.get_operation_by_name("x")
self.encoded = self.sess.graph.get_operation_by_name("encoded")
但是,当我尝试使用加载的图表时,出现错误:
def encode(self, X):
return self.sess.run(self.encoded,
feed_dict={self.input: X})
==> TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a Operation into a Tensor.
我的 feed_dict self.input 被解释为一个操作,而不是一个张量。请注意,我无法将“x”加载为张量 - 如果我尝试self.input = self.sess.graph.get_tensor_by_name("x")
,我会收到一个错误,报告“x”是操作的名称,而不是张量。
但是,如果我检查 self.input,它会被报告为占位符:
name: "x"
op: "Placeholder"
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
dim {
size: -1
}
dim {
size: 81
}
}
}
}
我究竟做错了什么?
解决方案
您正在指定一个完整的操作,但由于操作可以有多个输出,您必须准确说明您想要哪个输出。尝试这个:
def encode(self, X):
return self.sess.run(self.encoded,
feed_dict={self.input.outputs[0]: X})
或者,您可以执行以下操作:
self.input = self.sess.graph.get_tensor_by_name("x:0")
推荐阅读
- c# - 通过 .NET SDK 创建链接的自托管集成运行时
- rust - 为什么在引用时,int lterals 会继续堆?
- php - 如何使用谷歌距离矩阵获取两个位置之间的距离
- installation - 我在 pythom anaconda 3.8.5 64bit 中安装 gdal 时遇到问题
- react-native - ScrollView 在 react-native 中不起作用
- vba - 当我使用 saveToFile 自动获取磁盘上的附件时出错
- c - 枚举可以被认为是不安全的吗?
- android - 如何在recyclerview gridlayout中实现水平和垂直链类型概念?
- excel - Excel从单元格列表中选择元素
- twitter - 使用 Twitter 广告 API 创建预定推文