Ошибка при обучении регрессионной модели Кераса

#python #tensorflow #keras #tensorflow2.0

#питон #тензорный поток #keras #тензорный поток 2,0

Вопрос:

Приношу извинения за этот вопрос новичка, я пытаюсь обучить регрессионную модель с помощью 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 слоя «модель» несовместим со слоем: ожидаемая форма=(Нет, 6, 5), найденная форма=(Нет, 5)

Ответ №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]] '''