Python Keras:非常低的精度,非常高的损耗,并且每个输入的预测都是相同的

Python Keras:非常低的精度,非常高的损耗,并且每个输入的预测都是相同的,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我正在开发一个使用keras的通用音频标签系统 我有以下数据输入: x_序列的每个输入有10个不同的数据(数据长度、最大值、最小值等),y_序列代表41个可能的标签(吉他、贝斯等) 我的模型是: from keras.models import Sequential from keras.optimizers import SGD from keras.layers import Dense, Dropout, Activation model = Sequential() model.ad

我正在开发一个使用keras的通用音频标签系统

我有以下数据输入: x_序列的每个输入有10个不同的数据(数据长度、最大值、最小值等),y_序列代表41个可能的标签(吉他、贝斯等)

我的模型是:

from keras.models import Sequential
from keras.optimizers import SGD
from keras.layers import Dense, Dropout, Activation

model = Sequential()

model.add(Dense(units=128, activation='relu', input_dim=10))
model.add(Dropout(0.5))
model.add(Dense(units=64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(41, activation='softmax'))

opt = SGD(lr=0.0001, decay=1e-6, momentum=0.9, nesterov=True)

model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

model.fit(np.array(x_train), np.array(y_train), epochs=5, batch_size=8)

这是我的结果:

Epoch 1/5
7104/7104 [==============================] - 1s 179us/step - loss: 15.7392 - acc: 0.0235
Epoch 2/5
7104/7104 [==============================] - 1s 132us/step - loss: 15.7369 - acc: 0.0236
Epoch 3/5
7104/7104 [==============================] - 1s 133us/step - loss: 15.7415 - acc: 0.0234
Epoch 4/5
7104/7104 [==============================] - 1s 132us/step - loss: 15.7262 - acc: 0.0242
Epoch 5/5
7104/7104 [==============================] - 1s 132us/step - loss: 15.6484 - acc: 0.0291
如你所见,我的结果显示数据丢失率很高,精确度很低,但主要问题是当我试图预测结果时,因为每个输入的输出都是相同的。我怎样才能解决这个问题


pre = model.predict(np.array(x_train), batch_size=8, verbose=0)

for i in pre:
    print(i)

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
...


在密集层中,只需为第一层指定输入尺寸

Keras负责其他层的昏暗

因此,请尝试:

model = Sequential()

model.add(Dense(units=128, activation='relu', input_dim=10))
model.add(Dropout(0.5))
model.add(Dense(units=64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(41, activation='softmax'))
也许你的正则化对这类数据来说太强了,试着选择一个不太强的或者根本没有退出的

你能做的最后一件事就是提高你的学习速度,从1e-3开始,看看是否有什么变化


希望我在密集层中帮助了您,您只需要为第一层指定输入尺寸

Keras负责其他层的昏暗

因此,请尝试:

model = Sequential()

model.add(Dense(units=128, activation='relu', input_dim=10))
model.add(Dropout(0.5))
model.add(Dense(units=64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(41, activation='softmax'))
也许你的正则化对这类数据来说太强了,试着选择一个不太强的或者根本没有退出的

你能做的最后一件事就是提高你的学习速度,从1e-3开始,看看是否有什么变化


希望我能帮助您

您可以尝试测试其他优化器,并尝试更改您的最后一层激活。我已经有了同样的问题,我在最后一个密集层使用Softmax激活,我改为Sigmoid,效果很好

一个好的策略是修改模型的架构,添加更多的层,更改退出值,等等


希望我能帮助你。祝你好运

您可以尝试测试其他优化器,并尝试更改最后一层激活。我已经有了同样的问题,我在最后一个密集层使用Softmax激活,我改为Sigmoid,效果很好

一个好的策略是修改模型的架构,添加更多的层,更改退出值,等等


希望我能帮助你。祝你好运

这不是一个编程问题。请考虑把这篇文章搬到这不是一个编程问题。请考虑把这篇文章转到HI,谢谢你的回复。我试了你写的所有东西,但问题总是一样的-在没有损失的情况下,每个历元的精度和损失保持不变-我更改了学习速率,但结果总是在相同的值之间波动。好吧,我认为问题一定来自您的数据,您是如何定义的?我有一个csv文件,它定义了音频名称、标签和各种其他数据,如最大长度最小最大值和其他函数。对于每个音频,我都关联了41个位置的向量,基于它所属的标签,该向量的值为1。x_列和y_列都是包含这些值的数组的数组。好像我的模特什么都没学到。嗨,谢谢你的回复。我试了你写的所有东西,但问题总是一样的-在没有损失的情况下,每个历元的精度和损失保持不变-我更改了学习速率,但结果总是在相同的值之间波动。好吧,我认为问题一定来自您的数据,您是如何定义的?我有一个csv文件,它定义了音频名称、标签和各种其他数据,如最大长度最小最大值和其他函数。对于每个音频,我都关联了41个位置的向量,基于它所属的标签,该向量的值为1。x_列和y_列都是包含这些值的数组的数组。好像我的模特什么都没学到。