Keras重命名模型和层

dzhpxtsq  于 2022-11-13  发布在  其他
关注(0)|答案(9)|浏览(351)

1)我尝试用TF后端重命名Keras中的模型和层,因为我在一个脚本中使用了多个模型。类模型似乎有属性model.name,但当更改它时,我得到“AttributeError:无法设置属性””。此处出现什么问题?
2)另外,我使用的是顺序API,我想给予层命名,这似乎是可能的功能API,但我发现没有解决方案的顺序API。没有人知道如何做顺序API?
更新至2):命名图层是可行的,尽管似乎没有文档记录。只需添加参数名称,例如model.add(Dense(...,...,name=“hiddenLayer 1”)。* 注意,同名图层共享权重!*

4c8rllxm

4c8rllxm1#

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

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

我在一个双输入模型的情况下需要这个,并且遇到了“AttributeError:也无法设置属性”“。问题是存在一个隐藏的基础attribute _name,这会导致冲突。

u5i3ibmn

u5i3ibmn2#

**根据tf2+**不再工作

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

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

至于命名图层,您可以在Sequential模型中这样做

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

最新解决方案
使用_name

kqqjbcuj

kqqjbcuj3#

若要在TF2.2.0中重新命名keras模型:
model._name = "newname"
我不知道这是不是一个坏主意-他们似乎不希望你这样做,但它确实工作。要确认,调用model.summary(),你应该看到新的名称。

jw5wzhpr

jw5wzhpr4#

来自用户239457的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)))
kzmpq1sx

kzmpq1sx5#

为了涵盖所有选项,关于问题的标题,如果您使用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")
l7mqbcuq

l7mqbcuq6#

若要只变更模型中的一个图层名称,您可以使用下列行:

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'
6rqinv9w

6rqinv9w7#

为了更改Tensorflow Keras上预训练模型的层名,解决方案稍微复杂一些。其他答案建议的简单layer.name = "new_name"layer._name = "new_name"将不起作用。
This blog post提供了一种适用于这种情况的解决方案。

rqqzpn5f

rqqzpn5f8#

详细答案在此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
ha5z0ras

ha5z0ras9#

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

相关问题