知道要放入Keras Dense图层中的内容

时间:2019-08-02 01:28:41

标签: python tensorflow keras

我是Keras的新手,正在做基本的Kaggle教程(The Digit Recognizer)。我正在努力了解实际放入Dense层中的内容。我发现this帖子非常有帮助,但是我的理解还不够。

在我的Sequential模型中,我从一个Dense图层开始。但是,我看到一些帖子说第一层必须必须有input_shape,而我看到很多Kaggle提交的内容和其他示例都没有遵守。

  1. 第一层是否实际需要input_shape?根本需要吗?
  2. Dense层的第一个参数是units。在我的一生中,我无法就此论证的实质找到扎实的解释。是否有一些公式可以根据您的数据shape在此处运行?有时候,我在第一Dense层中看到相当大的数字(大约784),而在其他情况下,它很小(大约10)。或者,是总猜测吗?

我知道没有一种“这就是您要为这类数据做的”方法来构建预测模型,但是我不明白如何对此处插入的数字进行有根据的猜测

这是我当前的型号:

model = Sequential()
model.add(Flatten())
model.add(Dense(64, activation=tf.nn.relu))
model.add(Dense(10, activation=tf.nn.softmax))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
x_val = x_train[:10000]
y_val = labels[:10000]
model.fit(x_train, y_train, epochs=3) # , validation_data=(x_val, y_val))

我的模型执行体面(我认为),因为在8400张图像中我只有350次未命中。通过添加更多层,更改数字,使用Dropout等,我将其降低到220左右。

我真的很想更好地了解应该插入哪些数字的最佳方法。而且,我是否需要input_shape

1 个答案:

答案 0 :(得分:1)

您的第一个问题:
是的,必须在第一层(在您的情况下为input_shape层)中指定Flatten。这是因为在编译模型后,需要初始化不同的#param(权重和偏差)。在您的情况下,第一个Dense层的#pram取决于您在input_shape层中指定的Flatten

第二个问题:
如果Desnse层是模型的最后一层,则unit显然应该是您希望模型执行的#classes / #outputs。但是,据我所知,在hidden layers方面,尚无这样的通用规则/公式来保证unit的最佳数量。它实际上取决于您输入到模型中的数据以及任务的复杂性等。我想说,应该根据反复试验来选择它。

编辑:
如果您对我的回答确实不满意,我在这里找到了第二个问题的一些信息。
EfficientNet paper:但适用于卷积神经网络
"Rlue of thumb":...