请提供一个单一数组或数组列表作为模型输入

我使用countvector来获取评论中每个单词的向量,并将其作为神经网络的输入数据。然而,总是会出现一些问题。以下是代码和错误信息:

train_X = vectorizer.transform(train_dataframe['comment'])valid_X = vectorizer.transform(valid_dataframe['comment'])test_X = vectorizer.transform(test_dataframe['comment'])print (train_X.shape)print (valid_X.shape)print (test_X.shape)train_Y = train_dataframe['label'].to_numpy()valid_Y = valid_dataframe['label'].to_numpy()train_inputs=train_Xtrain_targets=train_Yvalidation_inputs=valid_Xvalidation_targets=valid_Y# 设置输入和输出大小input_size = 31124output_size = 1# 两个隐藏层使用相同的大小。这不是必须的。hidden_layer_size = 50# 定义模型结构model = tf.keras.Sequential([    # tf.keras.layers.Dense 基本上实现了:output = activation(dot(input, weight) + bias)    # 它接受多个参数,但对我们来说最重要的参数是hidden_layer_size和激活函数    tf.keras.layers.Dense(hidden_layer_size, activation='relu'), # 第一个隐藏层    tf.keras.layers.Dense(hidden_layer_size, activation='relu'), # 第二个隐藏层    # 最后一层没有区别,我们只需要确保使用softmax激活    tf.keras.layers.Dense(output_size, activation='sigmoid') # 输出层])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])### 训练# 这是我们训练构建的模型的地方。# 设置批次大小batch_size = 100# 设置最大训练轮数max_epochs = 100# 拟合模型# 请注意,这次训练、验证和测试数据不是可迭代的model.fit(train_inputs, # 训练输入          train_targets, # 训练目标          batch_size=batch_size, # 批次大小          epochs=max_epochs, # 我们将训练的轮数(假设提前停止不会生效)          validation_data=(validation_inputs, validation_targets), # 验证数据          verbose = 2 # 确保我们得到足够的训练过程信息          )  test_loss, test_accuracy = model.evaluate(test_inputs, test_targets)print('\n测试损失: {0:.2f}. 测试准确率: {1:.2f}%'.format(test_loss, test_accuracy*100.))

错误信息如下:

 请提供一个单一数组或数组列表作为模型输入。你传递了:x=  (0, 1404)    1  (0, 4453) 2  (0, 6653) 1  (0, 8151) 1  (0, 11070)    1  (0, 14557)    1  (1, 817)  1  (1, 1134) 1  (1, 1813) 1  (1, 1827) 1  (1, 2151) 1  (1, 4505) 1  (1, 4647) 1  (1, 8244) 2  (1, 8296) 1  (1, 8332) 1  (1, 9109) 1  (1, 9611) 1  (1, 10080)    1  (1, 10791)    1  (1, 11821)    1  (1, 12714)    1  (1, 12760)    1  (1, 13665)    1  (1, 14349)    1  : :  (42423, 16238)    1  (42423, 17253)    1  (42423, 18627)    1  (42423, 19322)    1  (42423, 19811)    1  (42423, 21232)    1  (42423, 23128)    1  (42423, 25572)    1  (42423, 25681)    1  (42423, 27132)    1  (42423, 27568)    2  (42423, 27580)    1  (42423, 27933)    1  (42423, 30921)    2  (42424, 932)  1  (42424, 4078) 1  (42424, 10791)    1  (42424, 10835)    1  (42424, 27628)    1  (42424, 27933)    1  (42424, 30220)    1  (42425, 1813) 1  (42425, 13868)    1  (42425, 27580)    1  (42425, 28749)    1

回答:

train_inputs 是调用 sklearn.feature_extraction.text.CountVectorizer.transform 后生成的 scipy.sparse.csr.csr_matrix 类型的稀疏矩阵,具体文档见此处:
https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer.transform

你可以尝试将稀疏矩阵转换为密集矩阵,并使用它作为训练的输入:

model.fit(train_inputs.toarray().astype(float), ...)

不过,这种方法在大数据集上可能会导致内存问题。如果你需要更复杂的方法,可以在这里找到如何在Keras中正确处理稀疏矩阵的更多信息:在Keras和TensorFlow中使用稀疏矩阵

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注