首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras model.pop()不工作

Keras model.pop()不工作
EN

Stack Overflow用户
提问于 2017-10-30 16:05:22
回答 1查看 724关注 0票数 1

我使用Python3.6.2和Tensorflow-GPU1.3.0运行Keras2.0.6。

为了对Vgg16模型进行微调,在手工构建了一个vgg16体系结构并加载了权重之后,我运行了这段代码,但是我还没有调用vgg16():

代码语言:javascript
复制
model = self.model
model.pop()
for layer in model.layers: layer.trainable=False
model.add(Dense(num, activation='softmax'))
self.compile()

当我检查Tensorboard中的图形时,我看到(查看附图的左上角) dense_3连接到dropout_2,但它自己在晃动。然后在它旁边我看到dense_4,也连接到dropout_2。

Tensorboard模型图

2016年5月6日,我试图按照joelthchao的建议,用下面的pop_layer()代码替换pop()。不幸的是,Tensorboard中显示的图表变成了无法理解的混乱。

代码语言:javascript
复制
def pop_layer(model):
    if not model.outputs:
        raise Exception('Sequential model cannot be popped: model is empty.')

    model.layers.pop()
    if not model.layers:
        model.outputs = []
        model.inbound_nodes = []
        model.outbound_nodes = []
    else:
        model.layers[-1].outbound_nodes = []
        model.outputs = [model.layers[-1].output]
    model.built = False

我知道有些东西不能正常工作,因为我在Kaggle猫对狗的比赛中运行时精度很低,在比赛中我徘徊在90%左右,而其他运行这段代码(它是从fast.ai改编的)在Theanos之上很容易得到97%。也许我的准确性问题来自其他地方,但我仍然不认为dense_3应该在那里悬空,我想知道这是否可能是我的精度问题的根源。

我如何才能明确地断开和删除dense_3?

在运行代码之前和之后,请参见下面的model.summary(),以便为微调做准备。我们不再看到dense_3了,但是我们确实在张图中看到了它。

跑前

代码语言:javascript
复制
Layer (type)                 Output Shape              Param #   
=================================================================
lambda_1 (Lambda)            (None, 3, 224, 224)       0         
_________________________________________________________________
zero_padding2d_1 (ZeroPaddin (None, 3, 226, 226)       0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 64, 224, 224)      1792      
_________________________________________________________________
zero_padding2d_2 (ZeroPaddin (None, 64, 226, 226)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 64, 224, 224)      36928     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 64, 112, 112)      0         
_________________________________________________________________
zero_padding2d_3 (ZeroPaddin (None, 64, 114, 114)      0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 128, 112, 112)     73856     
_________________________________________________________________
zero_padding2d_4 (ZeroPaddin (None, 128, 114, 114)     0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 128, 112, 112)     147584    
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 128, 56, 56)       0         
_________________________________________________________________
zero_padding2d_5 (ZeroPaddin (None, 128, 58, 58)       0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 256, 56, 56)       295168    
_________________________________________________________________
zero_padding2d_6 (ZeroPaddin (None, 256, 58, 58)       0         
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 256, 56, 56)       590080    
_________________________________________________________________
zero_padding2d_7 (ZeroPaddin (None, 256, 58, 58)       0         
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 256, 56, 56)       590080    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 256, 28, 28)       0         
_________________________________________________________________
zero_padding2d_8 (ZeroPaddin (None, 256, 30, 30)       0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 512, 28, 28)       1180160   
_________________________________________________________________
zero_padding2d_9 (ZeroPaddin (None, 512, 30, 30)       0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 512, 28, 28)       2359808   
_________________________________________________________________
zero_padding2d_10 (ZeroPaddi (None, 512, 30, 30)       0         
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 512, 28, 28)       2359808   
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 512, 14, 14)       0         
_________________________________________________________________
zero_padding2d_11 (ZeroPaddi (None, 512, 16, 16)       0         
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 512, 14, 14)       2359808   
_________________________________________________________________
zero_padding2d_12 (ZeroPaddi (None, 512, 16, 16)       0         
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 512, 14, 14)       2359808   
_________________________________________________________________
zero_padding2d_13 (ZeroPaddi (None, 512, 16, 16)       0         
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 512, 14, 14)       2359808   
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 512, 7, 7)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 25088)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 4096)              102764544 
_________________________________________________________________
dropout_1 (Dropout)          (None, 4096)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 4096)              16781312  
_________________________________________________________________
dropout_2 (Dropout)          (None, 4096)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 1000)              4097000   
=================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0

跑后

代码语言:javascript
复制
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lambda_1 (Lambda)            (None, 3, 224, 224)       0         
_________________________________________________________________
zero_padding2d_1 (ZeroPaddin (None, 3, 226, 226)       0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 64, 224, 224)      1792      
_________________________________________________________________
zero_padding2d_2 (ZeroPaddin (None, 64, 226, 226)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 64, 224, 224)      36928     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 64, 112, 112)      0         
_________________________________________________________________
zero_padding2d_3 (ZeroPaddin (None, 64, 114, 114)      0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 128, 112, 112)     73856     
_________________________________________________________________
zero_padding2d_4 (ZeroPaddin (None, 128, 114, 114)     0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 128, 112, 112)     147584    
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 128, 56, 56)       0         
_________________________________________________________________
zero_padding2d_5 (ZeroPaddin (None, 128, 58, 58)       0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 256, 56, 56)       295168    
_________________________________________________________________
zero_padding2d_6 (ZeroPaddin (None, 256, 58, 58)       0         
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 256, 56, 56)       590080    
_________________________________________________________________
zero_padding2d_7 (ZeroPaddin (None, 256, 58, 58)       0         
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 256, 56, 56)       590080    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 256, 28, 28)       0         
_________________________________________________________________
zero_padding2d_8 (ZeroPaddin (None, 256, 30, 30)       0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 512, 28, 28)       1180160   
_________________________________________________________________
zero_padding2d_9 (ZeroPaddin (None, 512, 30, 30)       0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 512, 28, 28)       2359808   
_________________________________________________________________
zero_padding2d_10 (ZeroPaddi (None, 512, 30, 30)       0         
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 512, 28, 28)       2359808   
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 512, 14, 14)       0         
_________________________________________________________________
zero_padding2d_11 (ZeroPaddi (None, 512, 16, 16)       0         
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 512, 14, 14)       2359808   
_________________________________________________________________
zero_padding2d_12 (ZeroPaddi (None, 512, 16, 16)       0         
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 512, 14, 14)       2359808   
_________________________________________________________________
zero_padding2d_13 (ZeroPaddi (None, 512, 16, 16)       0         
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 512, 14, 14)       2359808   
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 512, 7, 7)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 25088)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 4096)              102764544 
_________________________________________________________________
dropout_1 (Dropout)          (None, 4096)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 4096)              16781312  
_________________________________________________________________
dropout_2 (Dropout)          (None, 4096)              0         
_________________________________________________________________
dense_4 (Dense)              (None, 2)                 8194      
=================================================================
Total params: 134,268,738
Trainable params: 8,194
Non-trainable params: 134,260,544
EN

回答 1

Stack Overflow用户

发布于 2019-01-07 15:35:39

我相信当使用tensorflow后端时,这是一个在Keras中实现layers.pop()的layers.pop。现在,这里是一个按名称删除最后一层的工作:

代码语言:javascript
复制
name_last_layer = str(model1.layers[-1])

model2 = Sequential()
for layer in model1.layers:
    if str(layer) != name_last_layer:
        model2.add(layer)

其中,model1是您的原始模型,而model2是相同的模型,没有最后一层。在本例中,我将model2设置为顺序模型,但您当然可以更改这个模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47019614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档