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

Python 我的Keras多重输出NN是否因为没有足够的层而不收敛?,python,machine-learning,keras,regression,Python,Machine Learning,Keras,Regression,我正在尝试建立一个神经网络来预测63个输入中的3个输出值。我有一个数据集,其中包含两个numpy数组,形状分别为[8100,63]和[8100,3],但当我尝试将它们提供给Keras时,模型不收敛,均方误差在10^11的范围内 我用来计算数据的函数没有任何非线性特性,所以我首先认为一层或两层就足够了。有了三层,MSE仍然在10^10的范围内,我不确定我做错了什么 回归应该返回三个大于1的绝对值-这就是我没有使用softmax图层的原因 如果您能提供任何意见或帮助,我将不胜感激 import nu

我正在尝试建立一个神经网络来预测63个输入中的3个输出值。我有一个数据集,其中包含两个numpy数组,形状分别为[8100,63]和[8100,3],但当我尝试将它们提供给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)

当我们使用神经网络进行分类时,我们应该在最后一层使用
softmax
,并使用
categorical\u交叉熵
损失

output = Dense(3, activation='softmax')(x)
model.compile(optimizer=Optimizer,
          loss='categorical_crossentropy')
对于回归,我们应该使用
线性
输出和
mse
损失

output = Dense(3)(x)
model.compile(optimizer=Optimizer,
          loss='mse')
您正在使用
categorical\u crossentropy
作为损失函数,使用
mse
作为度量

model.compile(optimizer=Optimizer,
              loss='categorical_crossentropy',
              metrics=['mse']
              )
将损失函数更改为
mse

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

当我们使用神经网络进行分类时,我们应该在最后一层使用
softmax
,并使用
categorical\u交叉熵
损失

output = Dense(3, activation='softmax')(x)
model.compile(optimizer=Optimizer,
          loss='categorical_crossentropy')
对于回归,我们应该使用
线性
输出和
mse
损失

output = Dense(3)(x)
model.compile(optimizer=Optimizer,
          loss='mse')
您正在使用
categorical\u crossentropy
作为损失函数,使用
mse
作为度量

model.compile(optimizer=Optimizer,
              loss='categorical_crossentropy',
              metrics=['mse']
              )
将损失函数更改为
mse

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

你能分享你的数据集吗?你能分享你的数据集吗?非常感谢!看起来已经好多了。现在我的损失大约是10^-5。我现在的问题是,metrics=['acc']返回的值约为0.55。你知道原因是什么吗?非常感谢!看起来已经好多了。现在我的损失大约是10^-5。我现在的问题是,metrics=['acc']返回的值约为0.55。你知道原因是什么吗?