我是Keras的新手,正在做基本的Kaggle教程(The Digit Recognizer)。我正在努力了解实际放入Dense
层中的内容。我发现this帖子非常有帮助,但是我的理解还不够。
在我的Sequential
模型中,我从一个Dense
图层开始。但是,我看到一些帖子说第一层必须必须有input_shape
,而我看到很多Kaggle提交的内容和其他示例都没有遵守。
input_shape
?根本需要吗?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
?
答案 0 :(得分:1)
您的第一个问题:
是的,必须在第一层(在您的情况下为input_shape
层)中指定Flatten
。这是因为在编译模型后,需要初始化不同的#param(权重和偏差)。在您的情况下,第一个Dense
层的#pram取决于您在input_shape
层中指定的Flatten
。
第二个问题:
如果Desnse
层是模型的最后一层,则unit
显然应该是您希望模型执行的#classes / #outputs。但是,据我所知,在hidden layers
方面,尚无这样的通用规则/公式来保证unit
的最佳数量。它实际上取决于您输入到模型中的数据以及任务的复杂性等。我想说,应该根据反复试验来选择它。
编辑:
如果您对我的回答确实不满意,我在这里找到了第二个问题的一些信息。
EfficientNet paper:但适用于卷积神经网络
"Rlue of thumb":...