尝试连接 keras 模型:ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点数)
Posted
技术标签:
【中文标题】尝试连接 keras 模型:ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点数)【英文标题】:Trying to concatenate keras models: ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float) 【发布时间】:2020-05-10 19:24:45 【问题描述】:我试图在 keras 中连接两个并行模型,每个模型都有不同的输入。相关代码如下。
# 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 数组转换为张量(不支持的对象类型浮点数)。
并出现在 model.fit 行。
我在 IDLE 中运行。训练和测试值都是数组,我检查了所有训练输入的长度是否相同:
#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 ...
任何帮助将不胜感激 - 在此先感谢!
完整的错误跟踪如下:
Traceback(最近一次调用最后一次):文件“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), 详细=2,随机播放=假)文件 “/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py”, 第 728 行,合适 use_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=strategy)文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_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) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/data_adapter.py”, 第 703 行,在 _process_numpy_inputs 输入=nest.map_structure(_convert_non_tensor,输入)文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/util/nest.py”, 第 535 行,在 map_structure 结构[0],[func(*x) for x in entries],文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/util/nest. py", 第 535 行,在 结构[0],[func(*x) for x in entries],文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/数据适配器.py", 第 700 行,在 _convert_non_tensor 返回 ops.convert_to_tensor(x) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py”, 第 1184 行,在 convert_to_tensor 中 返回 convert_to_tensor_v2(值,dtype,preferred_dtype,名称)文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_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/tensorflow_core/python/framework/ops.py”, 第 1296 行,internal_convert_to_tensor ret = conversion_func(值,dtype=dtype,name=name,as_ref=as_ref)文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/framework/tensor_conversion_registry.py", 第 52 行,在 _default_conversion_function 中 return constant_op.constant(value, dtype, name=name) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_core/python/framework/constant_op.py", 第 227 行,保持不变 allow_broadcast=True) 文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow_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(value, ctx.device_name, dtype) ValueError: 无法将 NumPy 数组转换为张量(不支持的对象类型 浮动)。
【问题讨论】:
请添加完整的错误跟踪。 @VivekMehta 谢谢 - 刚刚添加 已解决:x_2 的值都是 float 类型,而 x_1 的值是 float32。 .astype('float32') 解决了我的问题 【参考方案1】:为了社区的利益,在答案部分指定解决方案(即使它出现在评论部分)。
x_2 的值都是 float
类型,而 x_1 values
是 float32
。
使用 x2.astype('float32')
将 x2
修改为 float32
已解决问题。
【讨论】:
以上是关于尝试连接 keras 模型:ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点数)的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 Keras 运行顺序模型时出现 ValueError
Keras ConvLSTM2D:保存模型时出现ValueError
在 Python 中运行 keras 模型时出现 ValueError