向Keras模型图层添加新单元并更改其权重

时间:2018-07-17 15:28:29

标签: python tensorflow keras

我正在做一个项目,该项目需要我向神经网络的输出层添加新单元以实现某种形式的迁移学习。我想知道是否可以这样做,并使用Keras或TensorFlow设置单位的权重。

具体来说,我想将输出神经元附加到Keras模型的输出层,并设置该神经元的初始权重和偏差。

2 个答案:

答案 0 :(得分:1)

您可以将新的单位添加到预训练的神经网络的输出层。据说这种迁移学习形式称为using the bottleneck features of a pre-trained network。这既可以在张量流中也可以在Keras中实现。

请在下面的Keras中找到该教程: https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

此外,在下面找到有关tensorflow的教程:

https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/08_Transfer_Learning.ipynb

希望这会有所帮助!

答案 1 :(得分:0)

偶然发现了我自己的问题的答案。谢谢大家的回答/评论。

https://keras.io/layers/about-keras-layers/

此源代码的前几行详细介绍了如何加载和设置权重。 本质上,将输出神经元附加到Keras模型可以通过加载旧的输出层,附加新的权重以及为新层设置权重来实现。代码在下面。

# Load weights of previous output layer, set weights for new layer
old_layer_weights = model.layers.pop().get_weights()
new_neuron_weights = np.ndarray(shape=[1,bottleneck_size])

# Set new weights

# Append new weights, add new layer
new_layer = Dense(num_classes).set_weights(np.append(old_layer_weights,new_neuron_weights))
model.add(new_layer)