【发布时间】:2018-05-13 20:49:18
【问题描述】:
我对我的 NN 模型有疑问。我正在使用来自 python 的 keras。我的训练包含 1000 个样本,每个样本有 4320 个特征。有 10 个类别,我的 Y 包含 10 个元素的 numpy 数组,除一个之外的所有位置都为 0。
但是,我的 NN 并没有从第一个 epoch 中学习,而且我的模型可能有误,这是我第一次尝试构建 NN 模型,我一定有一些地方出错了。
Epoch 1/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7110 - acc: 0.5796
Epoch 2/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 3/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 5/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 6/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 7/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800
Epoch 8/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800
这是我的神经网络代码的一部分:
model = Sequential()
model.add(Dense(4320, input_dim=4320, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(10, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=10)
所以,我的 X 是一个长度为 1000 的 numpy 数组,其中包含其他 4320 个元素的 numpy 数组。我的 Y 是一个长度为 1000 的 numpy 数组,其中包含其他 10 个元素(类别)的 numpy 数组。
是我做错了什么,还是无法根据这个训练集学习? (在曼哈顿距离的 1NN 上,我在这个训练集上的准确率约为 80%)
L.E.:在我标准化数据后,这是我前 10 个 epoch 的输出:
Epoch 1/150
1000/1000 [==============================] - 41s 41ms/step - loss: 7.9834 - acc: 0.4360
Epoch 2/150
1000/1000 [==============================] - 41s 41ms/step - loss: 7.2943 - acc: 0.5080
Epoch 3/150
1000/1000 [==============================] - 39s 39ms/step - loss: 9.0326 - acc: 0.4070
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 8.7106 - acc: 0.4320
Epoch 5/150
1000/1000 [==============================] - 40s 40ms/step - loss: 7.7547 - acc: 0.4900
Epoch 6/150
1000/1000 [==============================] - 44s 44ms/step - loss: 7.2591 - acc: 0.5270
Epoch 7/150
1000/1000 [==============================] - 42s 42ms/step - loss: 8.5002 - acc: 0.4560
Epoch 8/150
1000/1000 [==============================] - 41s 41ms/step - loss: 9.9525 - acc: 0.3720
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 9.7160 - acc: 0.3920
Epoch 10/150
1000/1000 [==============================] - 39s 39ms/step - loss: 9.3523 - acc: 0.4140
看起来它开始波动,所以看起来不错
【问题讨论】:
-
如果类是互斥的,使用
softmax激活和categorical_crossentropy作为损失函数更合适。另外,您的数据集是否标准化? -
谢谢你,我已经做了你的改变。完全忘记了对数据进行规范化,现在就这样做了,看起来准确度开始从一个时代变化到另一个时代(编辑了主帖)。你觉得隐藏层的神经元数量还可以吗?如果我的准确率在第一个 epochs 下降可以吗?
-
一旦你确定一切正常(现在没问题),你就需要调整它。您是否也尝试更改激活函数和损失函数?
-
是的,都改了
标签: python numpy tensorflow neural-network keras