首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一条规则来查找和设置DNN隐藏层的神经元数量?

是否有一条规则来查找和设置DNN隐藏层的神经元数量?
EN

Stack Overflow用户
提问于 2022-06-19 19:36:24
回答 1查看 113关注 0票数 1

我的情况是:多类分类问题,有5个特征(列在我的数据中),15个类,单个标签。我的模型是:一个输入层有5个神经元,一个隐层有ReLU,一个输出层有softmax。我有两个问题:

  1. 输入层有多少个神经元?它是否确定它是根据特征的数量加偏见?我试着调整输入层的神经元数量,比如77个神经元,性能提高了,我很困惑。
  2. 我尝试了随机搜索cv来查找隐藏层的数量、神经元数量和学习速率,我在Scikit学习中使用了Randomizedsearchcv,然后best_params会显示如下内容:

{‘学习速率’:0.0023716395806862335,‘n_层’:1,‘n_神经元’:291}

所以,问题是,比如说,如果它显示best_params 'n_layer':2,但是‘n_神经元’:291。那么,它被解释为每层291个神经元,以及模型中的两个隐藏层吗?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-20 07:59:04

第一个问题的答案是:输入层的形状集、基本特征数。在您的问题中,您需要5个功能,然后输入层需要5个,在我的示例中,我有784个特性,然后输入层的形状应该是784。

是的,我们有找出DNN层中神经元数目的规则。我强烈建议您使用Keras Tuner。KerasTuner使用values优化Hyperband随机搜索算法为您的模型找到最佳超参数值。--我用fashion_mnist数据集编写了一个示例,其中包含您在问题中解释的模型。我使用epoch=2,对于您的问题,您可以使用这个具有更大年代的搜索。对于这个问题,KerasTuner发现first layer = 416的最佳神经元(<-您想找到这个)和最佳的learning_rate-0.0001

代码语言:javascript
复制
# !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')}")

输出:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72679816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档