我需要一种方法来获取TensorFlow中任何类型的层(即Dense,Conv2D等)的输出张量的形状。根据文档,有output_shape
可以解决问题的属性。但是,每次访问它都会得到AttributedError
。
这是显示问题的代码示例:
import numpy as np
import tensorflow as tf
x = np.arange(0, 8, dtype=np.float32).reshape((1, 8))
x = tf.constant(value=x, dtype=tf.float32, verify_shape=True)
dense = tf.layers.Dense(units=2)
out = dense(x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
res = sess.run(fetches=out)
print(res)
print(dense.output_shape)
该print(dense.output_shape)
语句将产生错误消息:
AttributeError: The layer has never been called and thus has no defined output shape.
或print(dense.output)
将产生:
AttributeError('Layer ' + self.name + ' has no inbound nodes.')
AttributeError: Layer dense_1 has no inbound nodes.
有什么办法可以解决该错误?
PS:
我知道在上面的示例中,我可以通过获得输出张量的形状out.get_shape()
。但是我想知道为什么output_shape
财产不起作用以及如何解决?
我该如何解决? 定义输入层:
x = tf.keras.layers.Input(tensor=tf.ones(shape=(1, 8)))
dense = tf.layers.Dense(units=2)
out = dense(x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
res = sess.run(fetches=out)
print(dense.output_shape) # shape = (1, 2)
根据Keras文档,如果层具有单个 节点
,则可以通过以下方式获取其输入张量,输出张量,输入形状和输出形状:
但是在上面的示例中,当我们调用layer.output_shape
或其他属性时,它引发了看起来有些奇怪的异常。
如果深入源代码,则错误是由 入站节点 引起的。
if not self._inbound_nodes:
raise AttributeError('The layer has never been called '
'and thus has no defined output shape.')
这些入站节点是什么?
甲 节点 描述了 两个层之间的连接 。每次将图层连接到一些新输入时,都会将一个节点添加到 layer._inbound_nodes
。每次层的输出被另一层使用时,都会将一个节点添加到 layer._outbound_nodes 。
如您在上面看到的,当self._inbounds_nodes
为None时,它将引发异常。 _ 这意味着,当一个层未连接到输入层或更普遍时,先前的所有层都没有连接到输入层,这self._inbounds_nodes
是空的,这导致了问题_。
请注意,x
在您的示例中,它是张量而不是输入层。请参阅另一个示例以获取更多说明:
x = tf.keras.layers.Input(shape=(8,))
dense = tf.layers.Dense(units=2)
out = dense(x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
res = sess.run(fetches=out, feed_dict={x: np.ones(shape=(1, 8))})
print(res)
print(res.shape) # shape = (1,2)
print(dense.output_shape) # shape = (None,2)
很好,因为定义了输入层。
请注意,在您的示例中,out
是张量。tf.shape()
函数和.shape
=(get_shape()
)之间的区别是:
tf.shape(x)
返回表示x的动态形状的一维整数张量。动态形状仅在图执行时才知道。
x.shape
返回表示x静态形状的Python元组。在图形定义时已知的静态形状。
在以下网址了解更多关于张量形状的信息:https :
//pgaleone.eu/tensorflow/2018/07/28/understanding-tensorflow-tensors-shape-
static-dynamic/
出发地:http://www.sitemaps.org/protocol.html: 如果要列出超过50000个URL,必须创建多个站点地图文件 那么是否有可能创建一个3层或更多层的链?例如: //mysite/sitemap.xml是: //mysite/sitemaps/index。xml是: 和//mysite/sitemaps/sitemap lm。xml。gz是一个普通的gzip XML
关于调整图层和填充图层 调整图层可将颜色和色调调整应用于图像,而不会永久更改像素值。例如,您可以创建“色阶”或“曲线”调整图层,而不是直接在图像上调整“色阶”或“曲线”。颜色和色调调整存储在调整图层中并应用于该图层下面的所有图层;您可以通过一次调整来校正多个图层,而不用单独的对每个图层进行调整。您可以随时扔掉更改并恢复原始图像。 填充图层使您可以用纯色、渐变或图案填充图层。与调整图层不同,填充图层
图层是 Sketch 中最基本的构成单位。不同于其他将图层和对象混为一谈的应用,在 Sketch 里每个对象都有自己的图层。所以在这个手册中,我们所说的“图层”和“对象”其实是一样的意思,这两个词是可以相互替换的。 编组和画板能让你在 Sketch 里有效的管理内容,他们也会被视为多个图层的组合。要想添加新的涂层,你可以单击工具栏中的 insert 按钮。 添加图层 添加图层最简单的方式便是直接从
标签 描述 laycount 重新分配layer图层和message层的数目 layopt 设定图层的属性 backlay forelay 把表层复制到里层 把里层复制到表层 copylay 把某一图层复制到目标图层上 laylevel 设定图层的absolute layfront layback 把指定图层移到最前面 指指定图层移到最后面 laycount 说明: (1) 重新分配layers[
Cesium支持从几个标准服务绘制和添加高分辨率图像(地图)图层。图层可以按顺序排列,并混合在一起。每一层的亮度、对比度、伽玛、色调和饱和度可以动态地改变。本节教程介绍了图层的概念以及相关的Cesuim APIs。 快速入门 我们暂时忽略细节,直接编写代码来添加一些图像层。在Sandcastle中打开Hello World示例。此示例创建一个Viewer组件,默认情况下,该组件呈现Bing Map
我想有一个传单层控件,在那里我可以选择一个基本层,并使这个基本层本身是一个LayerGroup,从中我可以选择要显示的子层。我正在考虑一个设置,在那里我点击一个单选按钮选择基本层(层组),然后我会看到一个复选框列表,其中的层显示。有没有办法使用库存层控件做到这一点? 我找了一些例子,翻阅了一下传单API,但没有找到类似的东西。