我的Keras多重输出NN是否没有收敛,因为我没有足够的图层?

时间:2018-07-21 15:04:59

标签: python machine-learning keras regression

我正在尝试建立一个神经网络来预测63个输入中的3个输出值。我有一个数据集,其中包含两个形状为[8100,63]和[8100,3]的numpy数组,但是当我尝试将它们馈送到Keras时,模型无法收敛,并且均方误差在10 ^ 11范围内。

我用来计算数据的函数没有任何非线性属性,因此我首先认为一层或两层就足够了。三层MSE仍在10 ^ 10范围内,我不确定自己做错了什么。

回归应该返回三个绝对值,这些绝对值可以大于1-这就是为什么我不使用softmax层的原因。

我将非常感谢您的任何投入或帮助!

import numpy as np
from keras.models import *
from keras.layers import Dense
from keras import optimizers
from keras.utils import plot_model



np.random.seed(7)

#Define Input
tf_features_64 = np.load("IN.npy")
tf_labels_64 = np.load("OUT.npy")
tf_features_32 = tf_features_64.astype(np.float32)
tf_labels_32 = tf_labels_64.astype(np.float32)

X = tf_features_32
Y = tf_labels_32


#create Layers
visible = Input(shape=(63,))
x = Dense(100, activation='relu')(visible)
x = Dense(100, activation='relu')(x)
x = Dense(100, activation='relu')(x)
x = Dense(70, activation='relu')(x)
x = Dense(30, activation='relu')(x)
output = Dense(3)(x)


Optimizer = optimizers.adam(lr=0.001)
model = Model(inputs=visible, outputs = output)
model.compile(optimizer=Optimizer,
              loss='categorical_crossentropy',
              metrics=['mse']
              )
model.fit(X, Y, epochs=400, batch_size=300, shuffle=True)

print(model.summary)

1 个答案:

答案 0 :(得分:2)

当我们使用神经网络进行分类时,我们应该在最后一层使用softmax 损失categorical_crossentropy

output = Dense(3, activation='softmax')(x)
model.compile(optimizer=Optimizer,
          loss='categorical_crossentropy')

对于回归,我们应该使用linear损失的mse输出

output = Dense(3)(x)
model.compile(optimizer=Optimizer,
          loss='mse')

您将categorical_crossentropy用作损失函数,并将mse用作度量标准

model.compile(optimizer=Optimizer,
              loss='categorical_crossentropy',
              metrics=['mse']
              )

将损失函数更改为mse

model.compile(optimizer=Optimizer,
              loss='mse')