Как и в ответе, который вы связали, вы не можете использовать API Sequential
по указанной причине.Вы должны использовать Model
API, который также называется функциональным API.Архитектурно, вам нужно определить для модели, как вы будете комбинировать входные данные со слоем Dense, т.е. как вы хотите создать промежуточный слой, а именно.объединить / добавить или вычесть и т. д. / создать слой для встраивания и т. д.), или, может быть, вы хотите иметь 2 нейронные сети, по одной на каждый вход, и хотите объединить выходные данные только в последнем слое.Код для каждого из приведенных выше вариантов будет различным.
Вот рабочее решение, предполагающее, что вы хотите объединить входные данные в вектор формы 672, а затем построить нейронную сеть на этом входном сигнале:
import tensorflow as tf
from tensorflow.keras.layers import *
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.optimizers import Adam, RMSprop
import numpy as np
input1 = Input(shape=(336,))
input2 = Input(shape=(336,))
input = Concatenate()([input1, input2])
x = Dense(2)(input)
x = Dense(1)(x)
model = Model(inputs=[input1, input2], outputs=x)
model.summary()
Вы заметите, что эта модель объединяет или объединяет два входа, а затем создает нейронную сеть поверх этого:
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 336) 0
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 336) 0
__________________________________________________________________________________________________
concatenate (Concatenate) (None, 672) 0 input_1[0][0]
input_2[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 2) 1346 concatenate[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 1) 3 dense[0][0]
==================================================================================================
Total params: 1,349
Trainable params: 1,349
Non-trainable params: 0
Если у вас есть какой-то другой предпочтительный способ создания промежуточного слоя, вам следуетзамените строку Concatenate
на строку кода.
Затем вы можете скомпилировать и подогнать модель:
model.compile(
optimizer = RMSprop(lr=0.02,rho=0.9,epsilon=None,decay=0),
loss = 'mean_squared_error',
metrics=['accuracy']
)
x1, x2 = np.random.randn(100, 336),np.random.randn(100, 336,)
y = np.random.randn(100, 1)
model.fit([x1, x2], y)