Как передать несколько входов через модель Keras с различными формами - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь создать модель Keras с несколькими входами.

input_img = Input(shape=(728,))
input_1 = Input(shape=(1,))
input_2 = Input(shape=(1,))

x = (Dense(48,kernel_initializer='normal',activation="relu"))(input_img)
x = (Dropout(0.2))(x)
x = (Dense(24,activation="tanh"))(x)
x = (Dropout(0.3))(x)
x = (Dense(1))(x)
x = keras.layers.concatenate([x, input_1, input_2])
x = (Activation("sigmoid"))(x)
cnn = Model(inputs = ([input_img, input_1, input_2]), outputs = x)
cnn.compile(loss="binary_crossentropy", optimizer='adam')

Я определил входные данные как

inputs = ([X_train.reshape(10000,728), input_1.reshape(10000,), input_2.reshape(10000,)])

и обучил следующим образом

history = cnn.fit (входные данные, метки, validation_split = 0.2, epochs = 30 , batch_size = 100, validation_data = (validation, label_test))

Всякий раз, когда я запускаю это, я получаю следующую ошибку

ValueError: Error when checking target: expected activation_12 to have shape (3,) but got array with shape (1,)

Как передать входные данные в виде формы (3,) если они имеют разные размеры?

1 Ответ

0 голосов
/ 24 марта 2020

Я воспроизвел ваш код для симуляции и, кажется, работает правильно.

Вот код для симуляции:

from tensorflow.keras.models import Model
from tensorflow import keras
from tensorflow.keras.layers import Dense, Dropout, Activation, Input, Concatenate
import tensorflow as tf

# inputs = ([X_train.reshape(10000,728), input_1.reshape(10000,), input_2.reshape(10000,)])
inputs = ([tf.ones((10000,728)), tf.ones((10000,)), tf.ones((10000,))]) # Input Simulation
labels = tf.ones((10000,3))  # Output Simulation


input_img = Input(shape=(728,))
input_1 = Input(shape=(1,))
input_2 = Input(shape=(1,))

x = (Dense(48,kernel_initializer='normal',activation="relu"))(input_img)
x = (Dropout(0.2))(x)
x = (Dense(24,activation="tanh"))(x)
x = (Dropout(0.3))(x)
x = (Dense(1))(x)
x = keras.layers.concatenate([x, input_1, input_2])
x = (Activation("sigmoid"))(x)
cnn = Model(inputs = ([input_img, input_1, input_2]), outputs = x)
cnn.compile(loss="binary_crossentropy", optimizer='adam')

cnn.summary()

history = cnn.fit(inputs, labels,  epochs=5, batch_size=100)

Я бы посоветовал вам правильно проверить ваши тренировочные данные и Этикетка данных формирует , чтобы обеспечить нет конфликтующих фигур, которые могут вызвать ошибки . Вы также можете конвертировать ваши данные в Tensors и посмотреть, решит ли это вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...