我的情況是:多類分類問題,有 5 個特征(我的資料中的列),15 個類,單個標簽。我的模型是:一個帶有 5 個神經元的輸入層,一個帶有 ReLU 的隱藏層,一個帶有 softmax 的輸出層。我有兩個問題:
- 輸入層有多少個神經元?確定是按照特征個數加上bias來設定的嗎?我嘗試調整輸入層中的神經元數量,比如 77 個神經元,性能有所提高,所以我很困惑。
- 我嘗試了 Randomized Search cv 來查找隱藏層數、神經元數和學習率,我在 Scikit learn 中使用了 Randomizedsearchcv,然后 best_params 會顯示如下內容:
{'learning_rate':0.0023716395806862335,'n_layer':1,'n_neurons':291}
所以,問題是,假設它顯示 best_params 'n_layer': 2,但 'n_neurons': 291。那么它是否被解釋為每層 291 個神經元,模型中有 2 個隱藏層?
先感謝您!
uj5u.com熱心網友回復:
第一個問題的答案:輸入層的形狀集基本特征數。在您的問題中,您需要 5 個特征,然后輸入層需要是 5,在我的示例中,我有 784 個特征,那么輸入層形狀應該是 784。
是的,我們有找到 DNN 層中神經元數量的規則。我強烈建議您使用Keras Tuner
. KerasTuner使用貝葉斯優化、超頻帶和隨機搜索演算法為您的模型找到最佳超引數值。我用資料集和您在問題中解釋的模型撰寫了一個示例。我使用,您可以將此搜索與更大的時期一起使用來解決您的問題。對于這個問題,找到(<- 你想找到這個)和 best的最佳 num 神經元。fashion_mnist
epoch=2
KerasTuner
first layer = 416
learning_rate-0.0001
# !pip install -q -U keras-tuner
import tensorflow as tf
import keras_tuner as kt
(img_train, label_train), (img_test, label_test) = tf.keras.datasets.fashion_mnist.load_data()
# Normalize pixel values between 0 and 1
img_train = img_train.astype('float32') / 255.0
img_train = img_train.reshape(60000, -1)
img_test = img_test.astype('float32') / 255.0
img_test = img_test.reshape(10000, -1)
label_train = tf.keras.utils.to_categorical(label_train, 10)
label_test = tf.keras.utils.to_categorical(label_test, 10)
def model_builder(hp):
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(784,))
# Tune the number of units in the first Dense layer
# Choose an optimal value between 32-512
hp_units = hp.Int('units', min_value=32, max_value=512, step=32)
model.add(tf.keras.layers.Dense(units=hp_units, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
# Tune the learning rate for the optimizer
# Choose an optimal value from 0.01, 0.001, or 0.0001
hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss = 'categorical_crossentropy', metrics = ['accuracy'])
return model
tuner = kt.Hyperband(model_builder,objective='val_accuracy',max_epochs=3,
factor=3,directory='my_dir',project_name='intro_to_kt')
stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)
tuner.search(img_train, label_train, epochs=2, validation_split=0.2, callbacks=[stop_early])
# Get the optimal hyperparameters
best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]
print(f"BEST num neurons for Dense Layer : {best_hps.get('units')}")
print(f"BEST learning_rate : {best_hps.get('learning_rate')}")
輸出:
Trial 11 Complete [00h 00m 14s]
val_accuracy: 0.8530833125114441
Best val_accuracy So Far: 0.8823333382606506
Total elapsed time: 00h 01m 03s
INFO:tensorflow:Oracle triggered exit
BEST num neurons for Dense Layer : 416 # <- You want this
BEST learning_rate : 0.001
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493867.html
上一篇:ValueError:`logits`和`labels`必須具有相同的形狀,收到((None,16)vs(None,1))