gpt4 book ai didi

python - 如何确定 Keras 的 Dense 方法中层的大小?

转载 作者:太空狗 更新时间:2023-10-29 20:49:21 25 4
gpt4 key购买 nike

下面是多类分类任务的简单例子虹膜数据。

import seaborn as sns
import numpy as np
from sklearn.cross_validation import train_test_split
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.regularizers import l2
from keras.utils import np_utils


#np.random.seed(1335)

# Prepare data
iris = sns.load_dataset("iris")
iris.head()
X = iris.values[:, 0:4]
y = iris.values[:, 4]


# Make test and train set
train_X, test_X, train_y, test_y = train_test_split(X, y, train_size=0.5, random_state=0)


################################
# Evaluate Keras Neural Network
################################


# Make ONE-HOT
def one_hot_encode_object_array(arr):
'''One hot encode a numpy array of objects (e.g. strings)'''
uniques, ids = np.unique(arr, return_inverse=True)
return np_utils.to_categorical(ids, len(uniques))

train_y_ohe = one_hot_encode_object_array(train_y)
test_y_ohe = one_hot_encode_object_array(test_y)


model = Sequential()
model.add(Dense(16, input_shape=(4,),
activation="tanh",
W_regularizer=l2(0.001)))
model.add(Dropout(0.5))
model.add(Dense(3, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')


# Actual modelling
# If you increase the epoch the accuracy will increase until it drop at
# certain point. Epoch 50 accuracy 0.99, and after that drop to 0.977, with
# epoch 70
hist = model.fit(train_X, train_y_ohe, verbose=0, nb_epoch=100, batch_size=1)


score, accuracy = model.evaluate(test_X, test_y_ohe, batch_size=16, verbose=0)
print("Test fraction correct (NN-Score) = {:.2f}".format(score))
print("Test fraction correct (NN-Accuracy) = {:.2f}".format(accuracy))

我的问题是人们通常如何决定层的大小?例如基于上面的代码我们有:

model.add(Dense(16, input_shape=(4,),
activation="tanh",
W_regularizer=l2(0.001)))
model.add(Dense(3, activation='sigmoid'))

Dense 的第一个参数是 16,第二个是 3。

  • 为什么两层使用两个不同的 Dense 值?
  • 我们如何选择 Dense 的最佳值(value)?

最佳答案

基本上这只是反复试验。这些称为超参数,应该在验证集上进行调整(从原始数据拆分为训练/验证/测试)。

调优只是意味着尝试不同的参数组合,并根据问题将损失值最低或准确性更高的参数保留在验证集上。

有两种基本方法:

  • 网格搜索:对于每个参数,确定一个范围并步入该范围,例如 8 到 64 个神经元,以 2 的幂(8、16、32、64)为单位,然后尝试参数的每个组合。这显然需要指数级数量的模型进行训练和测试,并且需要花费大量时间。

  • 随机搜索:做同样的事情,但只是为每个参数定义一个范围,然后尝试从每个范围内的均匀分布中抽取一组随机参数。您可以尝试尽可能多的参数集,可以尝试多长时间。这只是一个知情的随机猜测。

不幸的是,没有其他方法可以调整这些参数。关于具有不同数量神经元的层,这可能来自调整过程,或者您也可以将其视为降维,例如前一层的压缩版本。

关于python - 如何确定 Keras 的 Dense 方法中层的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com