Keras模型预测概率分布

时间:2018-05-27 18:50:03

标签: python keras

我们正在尝试构建一个keras模型来预测具有来自特征向量的概率的向量。输出向量应该是0到1之间的概率和总和为1,但有些输出向量主要由零和1组成,而且在模型应该训练的时间内学习损失和val_loss率仍然存在同样的。

有谁知道我们的模型有什么问题?

输入向量的示例:

  

(0,4,1444997,0,622,154536,0,2,11,0,5,11,10,32,4.26E-04,0,5,498,11,1,11,0,172,0,4 ,1,8,150)

预期输出向量的示例:

  

(0.25,0,0,0.083333333,0.583333333,0.083333333)

实际输出向量的示例:

  

(1.000000000000000000e + 00,5.556597260531319618e-28,1.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 个答案:

答案 0 :(得分:1)

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

现在,在这种情况下,每个层中的神经元都很少,“relu”可能会导致冻结损失。 (也是不正确的权重初始化)

我建议你不要使用“softplus”,“tanh”甚至“sigmoid”。

编辑:

正如@nuric建议的那样,当你使用“softmax”时,使用“categorical_crossentropy”作为损失真的是个好主意。

相关问题