Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图重建VGG16的参数太多_Python_Keras_Computer Vision_Conv Neural Network - Fatal编程技术网

Python 试图重建VGG16的参数太多

Python 试图重建VGG16的参数太多,python,keras,computer-vision,conv-neural-network,Python,Keras,Computer Vision,Conv Neural Network,所以我尝试使用VGG16架构和imagenet权重在keras中进行一些迁移学习。我想对最后两层进行随机权重和偏差训练,所以我使用model.pop()来消除它们,并手动添加最后两层。调用model.summary()时,除了最后一块卷积层(我添加的)中的参数数量从230万个增加到5100万个之外,它看起来完全一样。我不确定是什么导致了参数的大幅增加?有人能给我解释一下吗?这会导致我的计算机在运行时耗尽资源(我假设ram,因为我只有16GB)。下面是我用来构建模型的代码 def build_mo

所以我尝试使用VGG16架构和imagenet权重在keras中进行一些迁移学习。我想对最后两层进行随机权重和偏差训练,所以我使用
model.pop()
来消除它们,并手动添加最后两层。调用
model.summary()
时,除了最后一块卷积层(我添加的)中的参数数量从230万个增加到5100万个之外,它看起来完全一样。我不确定是什么导致了参数的大幅增加?有人能给我解释一下吗?这会导致我的计算机在运行时耗尽资源(我假设ram,因为我只有16GB)。下面是我用来构建模型的代码

def build_model():
model = VGG16(weights='imagenet',include_top=True)
model.input
model.summary()
for l in model.layers:
    l.trainable =False
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()


orig = model.input


new_model = Conv2D(512,(14,14),activation='relu',padding='same',name='conv1')(model.get_layer('block4_pool').output)
new_model = Conv2D(512,(14,14),activation='relu',padding='same',name='conv2')(new_model)
new_model =Conv2D(512,(14,14),activation='relu',padding='same',name='conv3')(new_model)
new_model =MaxPooling2D((2,2),name='pool')(new_model)
new_model =Flatten(name='flatten')(new_model)
new_model =Dense(4096,activation='relu',name='fc1')(new_model)
new_model =Dense(1024,activation='relu',name='fc2')(new_model)
new_model =Dense(512,activation='relu',name='fc3')(new_model)
new_model =Dense(2,activation='softmax',name='output')(new_model)
model = Model(orig,new_model)
model.summary()

return model
我当时很忙,忘了把
model.summary()
的输出放进去。 这是原始VGG16的摘要:

    Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
predictions (Dense)          (None, 1000)              4097000   
=================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
_________________________________________________________________

This is the output for the modified network:
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
conv1 (Conv2D)               (None, 14, 14, 512)       51380736  
_________________________________________________________________
conv2 (Conv2D)               (None, 14, 14, 512)       51380736  
_________________________________________________________________
conv3 (Conv2D)               (None, 14, 14, 512)       51380736  
_________________________________________________________________
pool (MaxPooling2D)          (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 1024)              4195328   
_________________________________________________________________
fc3 (Dense)                  (None, 512)               524800    
_________________________________________________________________
output (Dense)               (None, 2)                 1026      
=================================================================
Total params: 269,263,170
Trainable params: 261,627,906
Non-trainable params: 7,635,264
_________________________________________________________________

model.summary()将准确地告诉您每个层有多少个参数,这就是您问题的答案。我刚刚添加了model.summary()的输出。我不确定是什么原因导致Conv2D参数从VGG16模型增加到最后3个Conv2D层(我与Keras一起添加的那些层)。除了参数的数量外,总结看起来是一样的。VGG使用3x3过滤器,而您的过滤器是14x14。啊,非常感谢