помогите с машинным обучением

я новичок в машинном обучении у меня есть такой код:

import keras
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

x_train = np.array([[1,2,3],[4,5,9],[7,8,15]])
y_train = np.array([1,0,0])

model = Sequential()
model.add(Dense(units=10, input_dim=2, activation='relu')) 
model.add(Dense(units=1, activation='softmax')) 
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x_train,y_train, epochs=3)

x_test = np.array([[5, 6], [6, 7]])
predictions = model.predict(x_test)

print(predictions)
print(predictions)

в нём выходит ошибка

Exception encountered when calling Sequential.call().

[1mInput 0 of layer "dense" is incompatible with the layer: expected axis -1 of input shape to have value 2, but received input with shape (None, 3)[0m

Arguments received by Sequential.call():
  • inputs=tf.Tensor(shape=(None, 3), dtype=int32)
  • training=True
  • mask=None

прошу помочь разобраться


Ответы (1 шт):

Автор решения: CrazyElf

Ну, ошибка легко лечится добавлением в начале размера входного слоя, как прямо в интерактивной подсказке к Sequental даже написано и в предупреждении, которое вы не показали в вопросе, но которое выводится:

from keras.layers import Dense, Input

...

model = Sequential()
model.add(Input(shape=(3,)))

При этом параметр input_dim= не нужен в слое Dense.

Но потом у вас выйдет другая ошибка - вы пытаетесь делать предсказания на списках размера 2, при том, что учите модель на списках размера 3. Что вы пытаетесь предсказать - непонятно. Размер элемента входных данных для предсказания должен быть в точности такой же, как и для обучения.

И, кроме того, ваша сеть ничему не учится, то ли данные не те, то ли топология сети. Первым делом нужно нормально поставить задачу и описать данные, и только после этого начинать строить сети.

→ Ссылка