#tensorflow #keras #concatenation #embedding
#tensorflow #keras #объединение #встраивание
Вопрос:
Я создаю нейронную сеть, в которой у меня есть две категориальные функции, которые проходят через слой встраивания каждый независимо, а затем их вложения безуспешно объединяются.
x1 = np.random.randint(24, size = (20,1))
x2 = np.random.randint(100, size = (20,1))
X_list = [x1,x2]
label_array = np.random.randint(2,size = (20,1))
input1 = Input(shape=(1,))
output1 = Embedding(input_dim = 25, output_dim = 10)(input1)
output1 = Reshape(target_shape=(10,))(output1)
input2 = Input(shape=(1,))
output2 = Embedding(input_dim = 101, output_dim = 10)(input2)
output2 = Reshape(target_shape=(10,))(output2)
inputs = [input1, input2]
output_embeddings = [ output1, output2]
output_model = Concatenate()(output_embeddings)
output_model = Dense(500, activation='relu')(output_model)
output_model = Dense(1, activation='sigmoid')(output_model)
model = Model(inputs = input_model, outputs = output_model)
model.compile(optimizer = 'adam', loss='binary_crossentropy')
model.predict(X_list)
Когда переменные input_dim (размеры словаря) равны
model.predict(X_list) возвращает вектор, а не ошибку, но если input_dim в слое встраивания имеют разные размеры, как в примере, я получаю эту ошибку: InvalidArgumentError: indexes [1,0] = 66 отсутствует в [0, 25) [[{{node embedding_23/embedding_lookup}} = GatherV2[Taxis= DT_INT32, Tindices= DT_INT32, Tparams= DT_FLOAT, _device=»/задание: локальный хост / реплика: 0/ задача: 0/ устройство: процессор: 0″](встраивание_23/ встраивание / чтение, встраивание_23/ Приведение, встраивание_23/ встраивание / поиск / ось)]]
Я предполагаю, что словари должны быть одинакового размера, но что делать, когда это не так?
Комментарии:
1. Для первого встраивания установите input_dim на размер словаря ввода 1, а для второго встраивания установите input_dim на размер словаря ввода 2.
2. Разве это не то, что я сделал?
3. Я выполнил приведенный выше код без каких-либо ошибок. Я изменил
model = Model(inputs = input_model, outputs = output_model)
, чтобыmodel = Model(inputs = inputs, outputs = output_model)
4. Вы правы, я по ошибке скопировал вставленный код и устранил ошибку