如何获得概率层的形状?
How to get the shape of a probabilistic layer?
我正在使用 TensorFlow 概率层构建模型。当我这样做时,model.output.shape
,我得到一个错误:
AttributeError: 'UserRegisteredSpec' object has no attribute '_shape'
如果我这样做,output_shape = tf.shape(model.output)
它会给出一个 Keras 张量:
<KerasTensor: shape=(5,) dtype=int32 inferred_value=[None, 3, 128, 128, 128] (created by layer 'tf.compat.v1.shape_15')
如何获得实际值 [None, 3, 128, 128, 128]
?
我尝试了 output_shape.get_shape()
,但这给出了张量形状 [5]
。
重现错误的代码:
import tensorflow as tf
import tensorflow_probability as tfp
from tensorflow_probability import distributions as tfd
tfd = tfp.distributions
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(10))
model.add(tf.keras.layers.Dense(2, activation="linear"))
model.add(
tfp.layers.DistributionLambda(
lambda t: tfd.Normal(
loc=t[..., :1], scale=1e-3 + tf.math.softplus(0.1 * t[..., 1:])
)
)
)
model.output.shape
要获取所有图层的输出形状,例如:
out_shape_list=[]
for layer in model.layers:
out_shape = layer.output_shape
out_shape_list.append(out_shape)
您将获得一个输出形状列表,每层一个
tf.shape
将 return 一个 KerasTensor,它不容易直接得到输出形状。
但是你可以这样做:
tf.shape(model.output)
>> `<KerasTensor: shape=(2,) dtype=int32 inferred_value=[None, 1] (created by layer 'tf.compat.v1.shape_168')>`
您想得到inferred_value
,所以:
tf.shape(model.output)._inferred_value
>> [None, 1]
基本上你可以访问任何层的输出形状:
tf.shape(model.layers[idx].output)._inferred_value
其中 idx
是所需图层的索引。
我正在使用 TensorFlow 概率层构建模型。当我这样做时,model.output.shape
,我得到一个错误:
AttributeError: 'UserRegisteredSpec' object has no attribute '_shape'
如果我这样做,output_shape = tf.shape(model.output)
它会给出一个 Keras 张量:
<KerasTensor: shape=(5,) dtype=int32 inferred_value=[None, 3, 128, 128, 128] (created by layer 'tf.compat.v1.shape_15')
如何获得实际值 [None, 3, 128, 128, 128]
?
我尝试了 output_shape.get_shape()
,但这给出了张量形状 [5]
。
重现错误的代码:
import tensorflow as tf
import tensorflow_probability as tfp
from tensorflow_probability import distributions as tfd
tfd = tfp.distributions
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(10))
model.add(tf.keras.layers.Dense(2, activation="linear"))
model.add(
tfp.layers.DistributionLambda(
lambda t: tfd.Normal(
loc=t[..., :1], scale=1e-3 + tf.math.softplus(0.1 * t[..., 1:])
)
)
)
model.output.shape
要获取所有图层的输出形状,例如:
out_shape_list=[]
for layer in model.layers:
out_shape = layer.output_shape
out_shape_list.append(out_shape)
您将获得一个输出形状列表,每层一个
tf.shape
将 return 一个 KerasTensor,它不容易直接得到输出形状。
但是你可以这样做:
tf.shape(model.output)
>> `<KerasTensor: shape=(2,) dtype=int32 inferred_value=[None, 1] (created by layer 'tf.compat.v1.shape_168')>`
您想得到inferred_value
,所以:
tf.shape(model.output)._inferred_value
>> [None, 1]
基本上你可以访问任何层的输出形状:
tf.shape(model.layers[idx].output)._inferred_value
其中 idx
是所需图层的索引。