ValueError:模型的输出张量必须是Keras图层的输出(因此保留了过去的图层元数据)

时间:2019-09-16 11:34:15

标签: python keras layer categorical-data tensor

我已经阅读了类似的问题,但是即使我尝试了几种方法,答案也对我不起作用。这是我搜索并在此处尝试的一些问题:

isin

Keras.backend.reshape: TypeError: Failed to convert object of type <class 'list'> to Tensor. Consider casting elements to a supported type

我将解释我的代码。 数据集是1500万行,具有4个维度,代表一天的device_id位置。 我有两种类型的数据:数字数据和分类日期。分类数据非常庞大(超过400万个不同的device_id),因此我不能使用一个热编码器,因为它会创建令人难以置信的巨大稀疏矩阵。我确实将Tensorflow嵌入用于分类数据。 我确实使用了功能模型,并将分类层和数字层合并为一个。神经网络的目标是预测将来的device_id位置。 我将先截取一部分数据,然后编写代码和代码

device_id                    seconds      latitude     longitude

jg4M/taYRc2cBJPGa8c7vw==       752        53.392060    -2.069796
jg4M/taYRc2cBJPGa8c8vw==       753        53.392060    -2.069796
PdhyfpkIT8Weslb54thwuQ==       754        51.496483     0.116620   

我将设备ID放入一个熊猫系列中,并转换为张量

data1000 = data1['device_id']

data_tf = tf.convert_to_tensor(data1000)

sess = tf.InteractiveSession()  
print(data_tf.eval())

sess.close()

我对每个数字列(长,纬度和秒)进行了相同的操作。 由于现在具有维度(1,),但是嵌入层将添加另一个维度,即输出维度,那么分类层将变为(none,1,1)我确实将数值数据重塑为(1,1) 我这样做是为了使数字层和分类层合并时它们可以具有相同的形状。我知道这是因为它会引发错误。 这是此代码。由于过程相同,我将仅显示纬度代码,并假设其对经度和秒数具有解释性。

data1_lat = data1['latitude']

type(data1_sec)
pandas.core.series.Series
data1_lat.values.reshape(15904370,1)

data_tf_lat = tf.convert_to_tensor(data1_lat)

sess = tf.InteractiveSession()  
print(data_tf_lat.eval())

sess.close()

现在我们去神经网络

data_tf_lat = Input(shape=(1,1))
data_tf_long = Input(shape=(1,1))
data_tf_sec = Input(shape=(1,1))
cat_in       = Input(shape=(1,))
embed_layer  = Embedding(input_dim=1, output_dim=1, input_length=(len_data1000))(cat_in)
#embed_layer  = Flatten(embed_layer)
merged_layer = concatenate([embed_layer,data_tf_lat,data_tf_long,data_tf_sec])
output       = LSTM(128)(merged_layer)
output       = Dense(10)(output)
output       = Dense(1)
model        = Model(inputs=[data_tf_lat,data_tf_long,data_tf_sec, cat_in], outputs=[output])

ValueError: Output tensors to a Model must be the output of a Keras `Layer` (thus holding past layer metadata). Found: <keras.layers.core.Dense object at 0x7ff04499db38>

任何帮助 我尝试了在这里和其他地方找到的几种方法,但是找不到解决方案? 谢谢

0 个答案:

没有答案