我们正在尝试构建一个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)
答案 0 :(得分:1)
保证和为1的最后一个激活函数是“softmax”。
现在,在这种情况下,每个层中的神经元都很少,“relu”可能会导致冻结损失。 (也是不正确的权重初始化)
我建议你不要使用“softplus”,“tanh”甚至“sigmoid”。
编辑:
正如@nuric建议的那样,当你使用“softmax”时,使用“categorical_crossentropy”作为损失真的是个好主意。