当前位置:  开发笔记 > 编程语言 > 正文

加载重量后如何在keras中添加和删除新图层?

如何解决《加载重量后如何在keras中添加和删除新图层?》经验,为你挑选了2个好方法。

我正在努力做转学习; 为此我想删除神经网络的最后两层并添加另外两层.这是一个示例代码,它也输出相同的错误.

from keras.models import Sequential
from keras.layers import Input,Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.layers.core import Dropout, Activation
from keras.layers.pooling import GlobalAveragePooling2D
from keras.models import Model

in_img = Input(shape=(3, 32, 32))
x = Convolution2D(12, 3, 3, subsample=(2, 2), border_mode='valid', name='conv1')(in_img)
x = Activation('relu', name='relu_conv1')(x)
x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool1')(x)
x = Convolution2D(3, 1, 1, border_mode='valid', name='conv2')(x)
x = Activation('relu', name='relu_conv2')(x)
x = GlobalAveragePooling2D()(x)
o = Activation('softmax', name='loss')(x)
model = Model(input=in_img, output=[o])
model.compile(loss="categorical_crossentropy", optimizer="adam")
#model.load_weights('model_weights.h5', by_name=True)
model.summary()

model.layers.pop()
model.layers.pop()
model.summary()
model.add(MaxPooling2D())
model.add(Activation('sigmoid', name='loss'))

我删除了图层pop()但是当我尝试添加它输出此错误时

AttributeError:'Model'对象没有属性'add'

我知道错误最可能的原因是使用不当model.add().我应该使用什么其他语法?

编辑:

我试图在keras中删除/添加图层但是在加载外部权重后不允许添加它.

from keras.models import Sequential
from keras.layers import Input,Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.layers.core import Dropout, Activation
from keras.layers.pooling import GlobalAveragePooling2D
from keras.models import Model
in_img = Input(shape=(3, 32, 32))

def gen_model():
    in_img = Input(shape=(3, 32, 32))
    x = Convolution2D(12, 3, 3, subsample=(2, 2), border_mode='valid', name='conv1')(in_img)
    x = Activation('relu', name='relu_conv1')(x)
    x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool1')(x)
    x = Convolution2D(3, 1, 1, border_mode='valid', name='conv2')(x)
    x = Activation('relu', name='relu_conv2')(x)
    x = GlobalAveragePooling2D()(x)
    o = Activation('softmax', name='loss')(x)
    model = Model(input=in_img, output=[o])
    return model

#parent model
model=gen_model()
model.compile(loss="categorical_crossentropy", optimizer="adam")
model.summary()

#saving model weights
model.save('model_weights.h5')

#loading weights to second model
model2=gen_model()
model2.compile(loss="categorical_crossentropy", optimizer="adam")
model2.load_weights('model_weights.h5', by_name=True)

model2.layers.pop()
model2.layers.pop()
model2.summary()

#editing layers in the second model and saving as third model
x = MaxPooling2D()(model2.layers[-1].output)
o = Activation('sigmoid', name='loss')(x)
model3 = Model(input=in_img, output=[o])

它显示此错误

RuntimeError: Graph disconnected: cannot obtain value for tensor input_4 at layer "input_4". The following previous layers were accessed without issue: []

indraforyou.. 49

您可以使用output最后一个模型并创建一个新模型.较低的层保持不变.

model.summary()
model.layers.pop()
model.layers.pop()
model.summary()

x = MaxPooling2D()(model.layers[-1].output)
o = Activation('sigmoid', name='loss')(x)

model2 = Model(input=in_img, output=[o])
model2.summary()

检查如何使用keras.applications中的模型进行转移学习?

编辑更新:

新错误是因为您正在尝试在全局上创建新模型,in_img而该模型实际上并未在先前的模型创建中使用..您实际上是在定义本地模型in_img.因此,全局in_img显然没有连接到符号图中的上层.它与加载重量无关.

为了更好地解决此问题,您应该使用model.input引用输入.

model3 = Model(input=model2.input, output=[o])



1> indraforyou..:

您可以使用output最后一个模型并创建一个新模型.较低的层保持不变.

model.summary()
model.layers.pop()
model.layers.pop()
model.summary()

x = MaxPooling2D()(model.layers[-1].output)
o = Activation('sigmoid', name='loss')(x)

model2 = Model(input=in_img, output=[o])
model2.summary()

检查如何使用keras.applications中的模型进行转移学习?

编辑更新:

新错误是因为您正在尝试在全局上创建新模型,in_img而该模型实际上并未在先前的模型创建中使用..您实际上是在定义本地模型in_img.因此,全局in_img显然没有连接到符号图中的上层.它与加载重量无关.

为了更好地解决此问题,您应该使用model.input引用输入.

model3 = Model(input=model2.input, output=[o])



2> Wesam Na..:

另一种方式

from keras.models import Model

layer_name = 'relu_conv2'
model2= Model(inputs=model1.input, outputs=model1.get_layer(layer_name).output)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有