ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 csr_matrix)

问题描述 投票:0回答:1

我尝试跑步:

import numpy as np
import pandas as pd
import tensorflow as tf
import numpy as np

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Embedding, GlobalAveragePooling1D
from tensorflow.keras.layers import TextVectorization
from sklearn.model_selection import train_test_split
from tensorflow import keras 

from nltk.tokenize.treebank import TreebankWordTokenizer, TreebankWordDetokenizer
from sklearn.feature_extraction.text import CountVectorizer

dataf=pd.read_csv('D:/datafile.csv')
data=pd.read_csv("D:/dataset1c2f4b7/dataset/train.csv",encoding='latin-1')
l=[]
for a in dataf['text']:
    l.append(a)
m=[]
for a in dataf['target']:
    m.append(a)

X_train, X_test, y_train, y_test = train_test_split(l, m, test_size=0.2, random_state=42)

vectorizer = CountVectorizer()
vectorizer.fit(X_train)
X_train = vectorizer.transform(X_train)
X_test = vectorizer.transform(X_test)
X_train=np.array(X_train)
X_test=np.array(X_test)
y_train=np.array(y_train)
y_test=np.array(y_test)
print(X_train)
model = keras.models.Sequential() 
model.add(keras.layers.Embedding(10000, 128)) 
model.add(keras.layers.SimpleRNN(64, return_sequences=True)) 
model.add(keras.layers.SimpleRNN(64)) 
model.add(keras.layers.Dense(128, activation="relu")) 
model.add(keras.layers.Dropout(0.4)) 
model.add(keras.layers.Dense(1, activation="sigmoid")) 
model.summary() 




model.compile("rmsprop", 
              "binary_crossentropy", 
              metrics=["accuracy"])
model.fit(X_train, y_train,epochs=5,verbose=False,validation_data=(X_test, y_test),batch_size=10)
model.save('gfgModel.h5')  
tf.saved_model.save(model, 'one_step 05')

这表明

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type csr_matrix)

我正在尝试创建一个文本分类器。

我只是期待模型能够被训练,因为一切都是数组形式。

python numpy tensorflow machine-learning
1个回答
0
投票

我可能应该等到你回答我的问题,但是......这里有一些观察结果

这个循环,当它工作时:

l=[]
for a in dataf['text']:
    l.append(a)

比必要的慢。

dataf['text']
是一个熊猫系列。 那就可以直接用了。 否则尝试
dataf['text'].to_list()
甚至
dataf['text'].to_numpy()
。 检查文档以验证方法名称。

根据文档,

CountVectorizer()
会产生稀疏的
csr_matrix
。 如果是这样
np.array(X_train)
将产生一个单行
csr_matrices
的数组。 这不是将稀疏矩阵转换为密集数组的正确方法。

anArray = sparse_matrix.toarray()

才是正确的方法

https://docs.scipy.org/doc/scipy/reference/ generated/scipy.sparse.csr_matrix.toarray.html#scipy.sparse.csr_matrix.toarray

© www.soinside.com 2019 - 2024. All rights reserved.