我尝试在TensorFlow2.0Keras中绑定权重,代码如下。但它显示了这个错误?有人知道怎么写密密麻麻的重量吗?在
tf.random.set_seed(0)
with tf.device('/cpu:0'):
# This returns a tensor
inputs = Input(shape=(784,))
# a layer instance is callable on a tensor, and returns a tensor
layer_1 = Dense(64, activation='relu')
layer_1_output = layer_1(inputs)
layer_2 = Dense(64, activation='relu')
layer_2_output = layer_2(layer_1_output)
weights = tf.transpose(layer_1.weights[0]).numpy()
print(weights.shape)
transpose_layer = Dense(
784, activation='relu')
transpose_layer_output = transpose_layer(layer_2_output)
transpose_layer.set_weights(weights)
predictions = Dense(10, activation='softmax')(transpose_layer)
# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
# print(model.weights)
model.summary()
错误
^{pr2}$
我花了很多时间才弄清楚,但我认为这是一种通过将Keras稠密层子类化来绑紧权重的方法。在
希望它能帮助别人。在
让我们先看看模型体系结构和模型参数(无需绑定权重)
蓝色箭头表示偏差。所以一个有n个输入的神经元有n+1个权重。在
现在需要将
transpose_layer
的权重与layer_1
联系起来。您将layers_1
的权重转换为64*784
,并将其设置为transpose_layers
,但是有几个问题weight[0]
将给出权重,weight[1]
将给出稠密层的偏差。所以你在那里很好。但是set_weights
需要一个权重列表。在Dense
层的情况下,它需要两个np数组的列表:第一个列表是大小的权重(64*784),第二个列表是大小为784的np数组,用于偏差。那么如何得到784个偏差值呢?在解决方案:
use_bias=False
来禁用偏差weight[1]
读取偏差值,并在set_weights
中传回它们)使用解决方案1编码:
^{pr2}$注意:您可以看到,}权重,如图所示(带有偏差)
use_bias=False
在transpose_layer
中的结果是784*64 = 50176
权重,而不是{相关问题 更多 >
编程相关推荐