Python 预测概率分布的Keras模型

Python 预测概率分布的Keras模型,python,keras,Python,Keras,我们正试图建立一个keras模型,用特征向量的概率率来预测向量。输出向量的概率率应介于0和1之间,且总和应为1,但输出向量的某些部分主要由0和1组成,此外,在模型应进行训练和学习期间,损失率和val_损失率保持不变 有人知道我们的模型有什么问题吗 输入向量示例: 0,41444997,0622154536,0,2,11,0,5,11,10,32,4.26E-04,0,5498,11,1,11,0172,0,4,1,8150 预期输出向量的示例: 0.25,0,0,0.083333,0.58333

我们正试图建立一个keras模型,用特征向量的概率率来预测向量。输出向量的概率率应介于0和1之间,且总和应为1,但输出向量的某些部分主要由0和1组成,此外,在模型应进行训练和学习期间,损失率和val_损失率保持不变

有人知道我们的模型有什么问题吗

输入向量示例:

0,41444997,0622154536,0,2,11,0,5,11,10,32,4.26E-04,0,5498,11,1,11,0172,0,4,1,8150

预期输出向量的示例:

0.25,0,0,0.083333,0.583333,0.083333

实输出向量示例:

1.000000000000000000e+00,5.556597260531319618e-28,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00

守则:

# Create first network with Keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers.advanced_activations import LeakyReLU
from keras import optimizers

import numpy
X = numpy.loadtxt("compiledFeatures.csv", delimiter=",")
Y = numpy.loadtxt("naive_compiledDate.csv", delimiter=",")

# create model
model = Sequential()
model.add(Dense(20, input_dim=28, init='normal', activation='relu'))
model.add(Dense(15, init='normal', activation='relu'))
model.add(Dense(6, init='normal', activation='relu'))
model.add(Dense(6, init='normal', activation='sigmoid'))

# Compile model
model.compile(optimizer = "adam", loss = 'mae')
# Fit the model
model.fit(X, Y, epochs=2000,  verbose=2, validation_split = 0.15)
# calculate predictions
predictions = model.predict(X)

保证总和为1的最后一个激活函数是softmax

现在,relu可能会导致冻结的丢失,在这种情况下,每一层中的神经元都非常少。还有一个不正确的权重初始化

我建议您使用softplus、tanh甚至sigmoid来代替relu

编辑:


正如@nuric所建议的,当您使用softmax时,使用分类交叉熵作为损失确实是一个好主意

将最后一层中的“sigmoid”替换为“softmax”,我认为你的损失函数应该是交叉熵而不是“mae”,如果使用softmax作为激活,我建议切换到分类交叉熵损失。