【发布时间】:2021-04-20 13:28:57
【问题描述】:
我对 Dropout 层和 Batch 标准化层有一些疑问。基本上,我已经做了一个简单的 DNN 结构,带有一个 Dropout 层和 Batch 归一化层,并对其进行训练就可以了。
DNN模型的简单结构举例:
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Dense(10, activation='relu', input_shape=[11]),
layers.Dropout(0.3),
layers.BatchNormalization(),
layers.Dense(8, activation='relu'),
layers.Dropout(0.3),
layers.BatchNormalization(),
layers.Dense(6, activation='relu'),
layers.Dropout(0.3),
layers.BatchNormalization(),
layers.Dense(1,activation='softmax'),
])
model.compile(
optimizer='adam',
loss='mae',
)
history = model.fit(
X_train, y_train,
validation_data=(X_valid, y_valid),
batch_size=256,
epochs=100,
verbose=0,
)
但现在我想在我的自定义预测模型中使用训练模型的所有层的权重和偏差(忘记其他方式)。
# Predictions for test
test_logits_1 = tf.matmul(tf_test_dataset, weights_1) + biases_1
test_relu_1 = tf.nn.relu(test_logits_1)
test_logits_2 = tf.matmul(test_relu_1, weights_2) + biases_2
test_relu_2 = tf.nn.relu(test_logits_2)
test_logits_3 = tf.matmul(test_relu_2, weights_3) + biases_3
test_relu_3 = tf.nn.relu(test_logits_3)
test_logits_4 = tf.matmul(test_logits_3 , weights_4) + biases_4
test_prediction = tf.nn.softmax(test_relu_4)
现在问题来了:必须要在预测模型中添加dropout层和batch normalized层,batch size吗?如果是,那么为什么要这样做?如何提取层的所有细节并将它们用于我的自定义预测模型?
【问题讨论】:
-
能解释一下为什么它需要在预测时间以及我应该取哪些参数??
-
你绝对需要使用 dropout 层。在训练期间,dropout 层将所有剩余的值乘以
1/(1-p),否则网络将接收到测试时输入的两倍。看到这个:stackoverflow.com/questions/59003985/… -
@Nicolas Gervais 我知道 dropout 层会规范其余未设置为零的值,但这里的 OP 不是在询问仅使用经过训练的权重进行推理吗?
-
批量归一化层没有任何参数,它只是一个归一化过程(即只是一些数据操作),类似于softmax层没有任何参数。
标签: python tensorflow keras