是否有一种方法可以在不重新训练的情况下找到我的DNN的最佳辍学率?
可能是一些子问题:
- 在每个密集层之后有一个dropout是明智的吗?
- 在最后有一个dropout层,只是重新训练最后一层,而不是整个模型,这是否足够?
(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.cifar10.load_data()
X_train = X_train_full[5000:]
y_train = y_train_full[5000:]
X_valid = X_train_full[:5000]
y_valid = y_train_full[:5000]
model_dropout = keras.models.Sequential()
model_dropout.add(keras.layers.Flatten(input_shape=[32, 32, 3]))
for _ in range(20):
model_dropout.add(keras.layers.Dense(100, activation="relu"))
model_dropout.add(keras.layers.Dropout(0.5)) #should be after each layer
model_dropout.add(keras.layers.Dense(10, activation="softmax"))
# Compile the model
model_dropout.compile(loss="sparse_categorical_crossentropy",
optimizer="adam",
metrics=["accuracy"])
# Train the model
result_dropout = model_dropout.fit(X_train, y_train, epochs=100, validation_data=(X_valid, y_valid))
# Plot the learning curves
pd.DataFrame(result_dropout.history).plot(figsize=(8, 5))
plt.grid(True)
plt.show()
# Evaluate the model
model_dropout.evaluate(X_test, y_test)
Dropout主要用于神经网络的正则化,也是避免模型过拟合的技术之一。Dropout层中使用的dropout_rate用于将前一层的一些特征归零以优化模型。您可以在模型定义中的任何层之后使用dropout层,并可以测试模型效率。此外,您还可以调整dropout层的数量和dropout_rate (Float)在0和1之间。相应减少的输入单位的比例
有关在模型中添加dropout图层的更多详细信息,请查看此链接。