Попытка объединить модели keras: ValueError: Не удалось преобразовать массив NumPy в Tensor (Неподдерживаемый тип объекта float) - PullRequest
2 голосов
/ 24 января 2020

Я пытаюсь объединить две параллельные модели в керасах, каждая с разными входами. Соответствующий код приведен ниже.

# model 1
model1_in = Input(shape=(train_x_1.shape[1], train_x_1.shape[2]))
model1_out = LSTM(50, activation='relu',return_sequences=False, name='layer_1')(model1_in)
model1 = Model(model1_in, model1_out)

# model 2
model2_in = Input(shape=(1))
model2_out = Dense(8, activation='relu', name='layer_2')(model2_in)
model2 = Model(model2_in, model2_out)

concatenated = concatenate(inputs=[model1.output, model2.output])
out = Dense(1, activation='relu', name='output_layer')(concatenated)
model = Model([model1_in, model2_in], out)
model.compile(loss='mean_absolute_error', optimizer='adam')


# fit network
history = model.fit([train_x_1,train_x_2], train_y, epochs=100, batch_size=72, validation_data=([test_x_1,test_x_2], test_y), verbose=2, shuffle=False)

Я получаю ошибку:

ValueError: Не удалось преобразовать массив NumPy в Tensor (Неподдерживаемый тип объекта float) .

и происходит в строке model.fit.

Я работаю в режиме ожидания. Значения train и test являются массивами, и я проверил, что все входы обучения имеют одинаковую длину:

#train_x_1.shape[0]
15465
#train_y.shape[0]
15465
#train_x_2.shape[0]
15465
#test_x_1.shape[0]
1719
#test_x_2.shape[0]
1719
#test_y.shape[0]
1719
#test_x_1
array([[[0.6243922 ],
        [0.5463666 ],
        [0.7083546 ], ... etc ...

Любая помощь будет принята с благодарностью - заранее спасибо!

Полная трассировка ошибок приведена ниже:

Трассировка (последний последний вызов): файл " filepath .py", строка 220, в history = model.fit ([train_x_1, train_x_2], train_y, epochs = 100, batch_size = 72, validation_data = ([test_x_1, test_x_2], test_y), verbose = 2, shuffle = False) Файл "/Library/Frameworks/Python.framework/Versions/3.6/ lib / python3 .6 / site-packages / tenorflow_core / python / keras / engine / training.py ", строка 728, в файле fit_id_multiprocessing = use_multiprocessing)" /Library/Frameworks/Python.framework/Versions/3.6 /lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py ", строка 224, в нужном формате distribution_strategy = стратегии) ​​Файл" /Library/Frameworks/Python.framework/Versions/ 3.6 / lib / python3 .6 / site-packages / tenorflow_core / python / keras / engine / training_v2.py ", строка 547, в _process_training_inputs use_multiprocessing = use_multiprocessing) Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", строка 606 , в _process_inputs use_multiprocessing = use_multiprocessing) Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/data_adapter.py", строка 217, в init x = _process_numpy_inputs (x) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/keras /engine/data_adapter.py ", строка 703, в _process_numpy_inputs inputs = nest.map_structure (_convert_non_tensor, inputs) Файл" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site- packages / tenorsflow_core / python / util / nest.py ", строка 535, в структуре map_structure [0], [fun c (* x) для x в записях], файл" /Library/Frameworks/Python.framework /Versions/3.6/lib/python3.6/site-packages/tensorflow_core/pytho n / util / nest.py ", строка 535, в структуре [0], [fun c (* x) для x в записях], файл" /Library/Frameworks/Python.framework/Versions/3.6/ lib / python3 .6 / site-packages / tenorflow_core / python / keras / engine / data_adapter.py ", строка 700, в _convert_non_tensor return ops.convert_to_tensor (x) файл" /Library/Frameworks/Python.framework/ Версии / 3.6 / lib / python3 .6 / site-packages /ensorflow_core / python / framework / ops.py ", строка 1184, в convert_to_tensor возвращают convert_to_tensor_v2 (значение, тип, тип_добавки, имя) Файл" / Library / Frameworks / Python .framework / Versions / 3.6 / lib / python3 .6 / site-packages /ensorflow_core / python / framework / ops.py ", строка 1242, в файле convert_to_tensor_v2 as_ref = False)" / Library / Frameworks / Python .framework / Versions / 3.6 / lib / python3 .6 / site-packages /ensorflow_core / python / framework / ops.py ", строка 1296, в internal_convert_to_tensor ret = translation_fun c (значение, dtype = dtype, name = name, as_ref = as_ref) Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/te nsorflow_core / python / framework / tenor_conversion_registry.py ", строка 52, в _default_conversion_function возвращает значение constant_op.constant (значение, dtype, name = name) Файл" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3 .6 / site-packages /ensorflow_core / python / framework / constant_op.py ", строка 227, в константе allow_broadcast = True) Файл" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3 , 6 / site-packages /ensorflow_core / python / framework / constant_op.py ", строка 235, в файле _constant_impl t = convert_to_eager_tensor (value, ctx, dtype)" /Library/Frameworks/Python.framework/Versions/3.6/lib /python3.6/site-packages/tensorflow_core/python/framework/constant_op.py ", строка 96, в convert_to_eager_tensor return ops.EagerTensor (значение, ctx.device_name, dtype) ValueError: не удалось преобразовать массив NumPy Tensor (Неподдерживаемый тип объекта float).

1 Ответ

1 голос
/ 14 февраля 2020

Указание решения в разделе ответов (даже если оно присутствует в разделе комментариев) для сообщества.

Все значения x_2 были такими, как float, в то время как x_1 values были как float32.

Изменение x2 до float32 с использованием x2.astype('float32') решило проблему.

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