#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]] '''