我有 45 个输入变量,用于预测 10 个输出变量。输出的所有值均为正值。我使用 Tensorflow Keras 创建了一个神经网络模型。训练数据集中的所有值都从 0 缩放到 1。如果我使用下面的函数创建 keras.function () 架构,我只会对正训练和测试数据得到一些负预测。我需要在一个模型中对所有输出变量进行建模,因为它们密切相关并且正在减少,我希望模型能够从相关性中学习。不过我不知道这是否有效。我尝试了很多架构来消除负预测值,但没有任何效果。
我的预测中得到负值有什么原因吗?我对输入数据使用最小-最大缩放,然后在做出预测后将其恢复到原始缩放。 任何见解将不胜感激。
两个隐藏层的激活函数是 relu,每个 512 个节点。输出函数是线性的。
def build_multi_output_model(): input_layer=layers.Input(shape=(X.shape[1],))
# Loop through units and activation functions for each layer
x = input_layer
for units, activation_function in zip(units_list, activation_functions):
x = layers.Dense(units=units, activation=activation_function)(x)
x = layers.Dropout(0.01)(x)
# Create multiple output layers
outputs = []
for i in range(y.shape[1]):
output_layer = layers.Dense(1, name=f'output_{i}')(x)
outputs.append(output_layer)
model = keras.Model(inputs=input_layer, outputs=outputs)
optimizer = keras.optimizers.Adam(learning_rate=learning_rate)
model.compile(optimizer=optimizer, loss='mean_squared_error', metrics=['mse'])
return model
model1 = build_multi_output_model() model1.fit(X_train, [y_train[:, i] for i in range(y.shape[1])], epochs=epochs, batch_size=batch_size, verbose=0)
我认为你的预测是 logits,为了获得真正的预测,你需要 sigmoid 或 softmax 函数,这取决于你的任务。