【发布时间】:2020-09-04 18:17:29
【问题描述】:
考虑迁移学习,以便在 keras/tensorflow 中使用预训练模型。对于每个旧层,trained 参数设置为false,以便在训练期间不会更新其权重,而最后一层已被新层替换,必须对其进行训练。特别是添加了两个具有512 和1024 神经元和relu 激活函数的全连接隐藏层。在这些层之后,Dropout 层与rate 0.2 一起使用。这意味着在每个训练 epoch 20% 的神经元被随机丢弃。
这个 dropout 层会影响哪些层?它会影响所有网络,包括已设置layer.trainable=false 的预训练层,还是仅影响新添加的层?还是只影响前一层(即具有1024 神经元的层)?
换句话说,在每个 epoch 中被 dropout 关闭的神经元属于哪一层?
import os
from tensorflow.keras import layers
from tensorflow.keras import Model
from tensorflow.keras.applications.inception_v3 import InceptionV3
local_weights_file = 'weights.h5'
pre_trained_model = InceptionV3(input_shape = (150, 150, 3),
include_top = False,
weights = None)
pre_trained_model.load_weights(local_weights_file)
for layer in pre_trained_model.layers:
layer.trainable = False
# pre_trained_model.summary()
last_layer = pre_trained_model.get_layer('mixed7')
last_output = last_layer.output
# Flatten the output layer to 1 dimension
x = layers.Flatten()(last_output)
# Add two fully connected layers with 512 and 1,024 hidden units and ReLU activation
x = layers.Dense(512, activation='relu')(x)
x = layers.Dense(1024, activation='relu')(x)
# Add a dropout rate of 0.2
x = layers.Dropout(0.2)(x)
# Add a final sigmoid layer for classification
x = layers.Dense (1, activation='sigmoid')(x)
model = Model( pre_trained_model.input, x)
model.compile(optimizer = RMSprop(lr=0.0001),
loss = 'binary_crossentropy',
metrics = ['accuracy'])
【问题讨论】:
标签: python tensorflow keras transfer-learning dropout