Keras重命名模型和图层

时间:2018-03-29 07:20:02

标签: python keras

1)我尝试使用TF后端重命名模型和Keras中的图层,因为我在一个脚本中使用多个模型。 类Model似乎具有属性model.name,但在更改它时我得到“AttributeError:无法设置属性”。 这是什么问题?

2)此外,我正在使用顺序API,我想给图层命名,这似乎是功能API的可能,但我找不到顺序API的解决方案。 anonye知道如何为顺序API做这件事吗?

更新到2):命名图层有效,尽管似乎没有记录。只需添加参数名称,例如model.add(Dense(...,...,name =“hiddenLayer1”)。注意,具有相同名称的图层共享权重!

9 个答案:

答案 0 :(得分:9)

关于型号名称的第一个问题在我的机器上无法重现。 我可以像这样设置它。很多时候这些错误都是由软件版本引起的。

model=Sequential()
model.add(Dense(2,input_shape=(....)))
model.name="NAME"

就命名图层而言,您可以在顺序模型中执行此操作

model=Sequential()
model.add(Dense(2,input_shape=(...),name="NAME"))

答案 1 :(得分:3)

user239457中的Answer仅与Standard keras一起使用。

如果您想使用Tensorflow Keras,可以这样做:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential(name='Name')
model.add(Dense(2,input_shape=(5, 1)))

答案 2 :(得分:2)

要在TF2.2.0中重命名keras模型:

model._name = "newname"

我不知道这是否是个坏主意-他们似乎不希望您这样做,但是确实有效。要确认,请致电model.summary(),您应该会看到新名称。

答案 3 :(得分:1)

要仅更改模型中的一个图层名称,可以使用以下几行:

my_model.layers[0]._name = 'my_new_name_for_the_first_layer'
my_model.layers[1]._name = 'my_new_name_for_the_second_layer'
my_model.layers[-1]._name = 'my_new_name_for_the_last_layer'

答案 4 :(得分:0)

仅涵盖有关问题标题的所有选项,如果您使用Keras功能API,则可以通过以下方式定义模型和层名称:

inputs = Input(shape=(value, value))

output_layer = Dense(2, activation = 'softmax', name = 'training_output')(dropout_new_training_layer)

model = Model(inputs= inputs, outputs=output_layer, name="my_model")

答案 5 :(得分:0)

要使用tf.keras更改model.layers的名称,可以使用以下行:

for layer in model.layers:
    layer._name = layer.name + str("_2")

在两输入模型的情况下,我需要此功能,并且也遇到了“ AttributeError:无法设置属性”。事实是,存在一个潜在的隐藏属性_name,它导致冲突。

答案 6 :(得分:0)

详细答案在这里How to rename Pre-Trained model ? ValueError 'Trained Model' is not a valid scope name

我们可以在开发模型并准备进行训练时使用model.name = "Model_Name"。我们还可以给图层命名。例如:

model = Sequential()
model.name = "My_Model" #Naming model
model.add(Dense(2,input_shape=(...),name="Name") #Naming layer

答案 7 :(得分:0)

为了在 Tensorflow Keras 上更改预训练模型的层名称,解决方案有点复杂。一个简单的 其他答案提出的 layer.name = "new_name"layer._name = "new_name" 将不起作用。

This blog post 提供了适用于这种情况的解决方案。

答案 8 :(得分:-1)

对于1),我认为您可以使用正确的名称和与现有模型相同的结构构建另一个模型。然后将现有模型各层的权重设置为新模型各层的权重。