Как обеспечить нейронную сеть двумя входами разных размеров? - PullRequest
0 голосов
/ 07 июля 2019

Я хочу кормить нейронную сеть двумя входами. Первый набор данных (элементы) будет иметь фиксированную форму (20, 1), что означает, что он будет одинаковым как для фазы обучения, так и для фазы тестирования (он никогда не изменится). Он состоит из значений от 1 до 100. Второй входной набор данных будет состоять из 20 двоичных объектов (столбцов) и N данных (форма: (N, 20)), и каждая строка этого набора данных будет указывать, какие строки набора данных элементов были объединены. Вывод будет иметь форму (N, 1) и будет результатом сочетания соответствующих элементов после применения к ним определенной функции.

Я знаю, как построить модель с несколькими входами, когда у нас одинаковое количество строк в обоих наборах данных, и мой подход пока такой:

# define two sets of inputs
inputA = Input(shape=(1,))
inputB = Input(shape=(elements.shape[0],))

# the first branch operates on the first input
x = Dense(100, activation="relu")(inputA)
x = Dense(50, activation="relu")(x)
x = Model(inputs=inputA, outputs=x)

# the second branch opreates on the second input
y = Dense(100, activation="relu")(inputB)
y = Dense(100, activation="relu")(y)
y = Dense(50, activation="relu")(y)
y = Model(inputs=inputB, outputs=y)

# combine the output of the two branches
combined = concatenate([x.output, y.output])

# apply a FC layer and then a regression prediction on the
# combined outputs
z = Dense(50, activation="relu")(combined)
z = Dense(1, activation="linear")(z)

# our model will accept the inputs of the two branches and
# then output a single value
model = Model(inputs=[x.input, y.input], outputs=z)

model.compile(loss="mean_squared_error", optimizer=Adam())

# train the model
print("[INFO] training model...")
model.fit([elements, X_train], y_train, epochs=200, verbose=1)

Однако, поскольку набор данных «elements» является фиксированным, строки 1-го ввода отличаются от строк 2-го ввода. Возникает следующая ошибка.

ValueError: All input arrays (x) should have the same number of samples. Got array shapes: [(20, 1), (33, 20)]

Вы знаете, как я мог преодолеть эту проблему?

1 Ответ

0 голосов
/ 07 июля 2019

Короткий ответ: размер batch_size всех ваших входов (и выходов) должен быть одинаковым.Но ничто не мешает вам повторять ваш (20, 1) набор данных для каждой записи в размере пакета, что приводит к форме (N, 20, 1).

Обратите внимание, что другие люди на этомотметил, что этот подход кажется неправильным.

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