我正在尝试使用tensorflow 2.0构建机器学习模型,该模型将用于对全文ocr数据进行分类,它使用了我正在努力进行的Embedding层。我已经对全文进行了预处理和标记化,并将所有数据保存为泡菜。
我正在从泡菜中装载所有东西,并将全文系列转换为numpy数组,如下所示:
df = pd.read_pickle("my_pickle.pkl")
feature = df['FullTextTokenized']
split_idx = int(len(features) * 0.8)
train_x = features[:split_idx].to_numpy()
test_x = features[split_idx:].to_numpy()
train_y = labels[:split_idx].to_numpy()
test_y = labels[split_idx:].to_numpy()
一切正常。 train_x现在是int32数组的数组。 如果我打印形状,则会得到以下结果,这也是正确的:
print(train_x.shape)
print(train_x[0].shape)
Output:
(126239,)
(1246,)
因此,我开始构建模型,摘要的外观如下:
Layer (type) Output Shape Param #
=================================================================
layer_embedding (Embedding) (None, 1246, 300) 30000000
...
所以一切都应该正常工作,因为嵌入层希望与我的train_x具有相同的形状
我正在通过以下方式开始培训:
# Train model
model.fit(train_x,
train_y,
validation_split=0.1,
callbacks=[cp_callback],
epochs=3,
batch_size=512)
在执行此操作时,出现以下错误,这对我来说毫无意义:
ValueError: Error when checking input: expected layer_embedding_input to have shape (1246,) but got array with shape (1,)
我的数据输入形状为(1240,),如上图所示。 我是否需要执行另一步骤以使tensorflow接受整个数组作为一个输入,还是试图获取给定数组的最低层,即int32?
在此先感谢您提供的帮助。