【问题标题】:Error while training Keras regression model训练 Keras 回归模型时出错
【发布时间】:2022-01-12 23:41:11
【问题描述】:

为这个新手问题道歉,我正在尝试使用 Keras 训练回归模型,但在 model.fit() 中出现错误。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np

inputs = keras.Input(shape=(6,5), name="digits")
x = layers.Dense(64, activation="relu", name="dense_1")(inputs)
x = layers.Dense(64, activation="relu", name="dense_2")(x)
outputs = layers.Dense(1, activation="softmax", name="predictions")(x)

model = keras.Model(inputs=inputs, outputs=outputs)

x_train = np.array([[ 0,  1,  2,  3,  4],
                    [ 5,  6,  7,  8,  9],
                    [10, 11, 12, 13, 14],
                    [ 0,  1,  2,  3,  4],
                    [ 5,  6,  7,  8,  9],
                    [10, 11, 12, 13, 14]])

y_train = np.array([1, 2, 3, 1, 2, 3])

model.compile(loss=keras.losses.SparseCategoricalCrossentropy())

history = model.fit(x_train,y_train)

这是错误,这是什么意思以及如何解决?我正在使用 TensorFlow 2.7.0。

图层“模型”的输入 0 与图层不兼容:预期 shape=(None, 6, 5), 找到 shape=(None, 5)

【问题讨论】:

    标签: python tensorflow keras tensorflow2.0


    【解决方案1】:

    要修复错误,您需要完全清楚数据的输入形状和输出形状。从您的代码推断,您希望将 3 个数据点映射到 [0,1,2,3,4] 到 1、[5,6,7,8,9] 到 2 和 [10,11,12,13,14] 到 3。

    因此,输入形状为(5,),输出形状为(1,),即(5,)应在tf.keras.Input中使用,y_train需要重新整形为(6,1)。

    此外,当您要进行回归时,应使用适当的输出层激活函数和损失函数。 (见下例)

    最后,调整优化器类型、学习率和其他超参数以获得更好的性能。

    演示:

    inputs = tf.keras.Input(shape=(5,), name="digits")#input shape is (5,)
    x = tf.keras.layers.Dense(64, activation="relu", name="dense_1")(inputs)
    x = tf.keras.layers.Dense(64, activation="relu", name="dense_2")(x)
    outputs = tf.keras.layers.Dense(1, name="predictions")(x)#use linear activation
    
    model = tf.keras.Model(inputs, outputs)
    
    x_train = np.array([[ 0,  1,  2,  3,  4],
                        [ 5,  6,  7,  8,  9],
                        [10, 11, 12, 13, 14],
                        [ 0,  1,  2,  3,  4],
                        [ 5,  6,  7,  8,  9],
                        [10, 11, 12, 13, 14]])
    
    y_train = np.array([1, 2, 3, 1, 2, 3])[:,None]#reshape
    
    model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.001,momentum=0.99)
            ,loss=tf.keras.losses.MeanSquaredError())#use MSE
    
    model.fit(x_train,y_train,epochs=500,verbose=0)
    
    print(model.predict(x_train))
    '''
    outputs:
    [[1.0019126]
     [2.010047 ]
     [3.0027502]
     [1.0019126]
     [2.010047 ]
     [3.0027502]]
    '''
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多