gpt4 book ai didi

python - 练习 4 由 Andrew Ng 在 Keras 中完成。

转载 作者:行者123 更新时间:2023-11-30 09:05:15 26 4
gpt4 key购买 nike

我正在自学一些机器学习,并且正在根据 Andrew Ng 的类(class)作业进行练习(用 Python)。
完成fourth exercise后我尝试在 Keras 中手动完成此操作,以便在库中进行练习。

在练习中,我们有 5000 个手写数字图像,从 0 到 9。每个图像都是一个 20x20 矩阵。数据集存储在形状为 5000x400 的矩阵 X 中(每个图像已“展开”),标签存储在形状为 5000x10 的矩阵 y 中。 y 的每一行都是一个 hot-one 向量。
该练习要求对具有一个输入层、一个隐藏层和一个输出层的简单神经网络实现反向传播以最大化对数似然。隐藏层有 25 个神经元,输出层有 10 个神经元。我们使用 sigmoid 作为这两个层的激活。

我在 Keras 中的代码是这样的

model=Sequential()
model.add(Dense(25,input_shape=(400,),use_bias=True,kernel_regularizer=regularizers.l2(1),activation='sigmoid',kernel_initializer='glorot_uniform'))
model.add(Dense(10,use_bias=True,kernel_regularizer=regularizers.l2(1),activation='sigmoid',kernel_initializer='glorot_uniform'))
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
model.fit(X, y, batch_size=5000,epochs=100, verbose=1)

因为我希望它与分配尽可能相似,所以我使用了与分配相同的初始权重、相同的正则化参数、与优化器相同的激活和梯度下降(实际上分配使用截断牛顿法但我不认为我的问题出在这里)。

我以为我做的一切都是正确的,但是当我训练网络时,我在训练数据集上得到了 10% 的准确率。即使稍微调整一下参数,准确性也不会发生太大变化。为了更好地理解这个问题,我用较小的数据集对其进行了测试。例如,如果我选择一个包含 100 个元素的子数据集,其中包含 x 个 0 图像和 100-x 个 1 图像,则我将获得 x% 的训练准确度。我的猜测是网络正在优化参数以仅识别第一个数字。
现在我的问题是:我缺少什么?为什么这不是上述神经网络的正确实现?

最佳答案

如果您正在 MNIST 数据集上练习,要对 10 个数字进行分类,您需要预测 10 个类别。您应该在隐藏层(在您的例子中是第一层)中使用 ReLU,而不是 sigmoid,并在输出层上使用 softmax 激活。将分类交叉熵损失函数与 adam 或 sgd 优化器结合使用。

关于python - 练习 4 由 Andrew Ng 在 Keras 中完成。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654360/

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