,和内存错误,python,tensorflow,keras,out-of-memory,sparse-matrix"/>

首页 > 解决方案 > Tensorflow 错误:无法找到可以处理输入的数据适配器:,和内存错误

问题描述

当我尝试使用 Tensorflow/Keras 为我的数据集测试一些文本分类示例代码时遇到两个错误 - https://realpython.com/python-keras-text-classification/

该代码在 Sklearn 模型上运行良好,但是当我将其更改为使用 Tensorflow/Keras 时,我遇到了这些错误。

警告和错误

(1) 警告:tensorflow:由于错误而从 v2 循环回退:未能找到可以处理输入的数据适配器:<class 'scipy.sparse.csr.csr_matrix'>, <class'NoneType'> (2) MemoryError:无法为形状为 (930495, 324044) 且数据类型为 int64 的数组分配 2.19 TiB

我当前的 Tensorflow 版本是 2.0.0。

X 是一个数据类型对象的数组——它本质上是一个要向量化的句子数组。

y 是二进制标签数组 - 0 或 1 数组([0, 0, 0, ...., 1, 1, 1], dtype=int64)

计数矢量化后:

X_train 是一个 930495x324044 类型的稀疏矩阵,类型为 '<class 'numpy.int64'>',具有 14680380 个以压缩稀疏行格式存储的元素

X_test 是一个 310165x324044 类型的稀疏矩阵,类型为 '<class 'numpy.int64'>',具有 4837502 个以压缩稀疏行格式存储的元素

这里有什么问题?是因为Tensorflow 2.0.0版本不支持稀疏矩阵还是我的数据集在向量化后太大了?我该如何解决这个问题?

如果有人可以在我尝试搜索但似乎找不到解决此问题的方法时对此提出建议,将不胜感激。

代码片段

df = joblib.load(classification_labeled_dataset)

X = df['Sentence'].to_numpy()
y = df['Label'].to_numpy()

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=100)

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
vectorizer.fit(X_train)
X_train = vectorizer.transform(X_train)
X_test = vectorizer.transform(X_test)

from tensorflow.keras.models import Sequential
from tensorflow.keras import layers

features = X_train.shape[1]
model = Sequential()
model.add(layers.Dense(10, input_dim=features, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()

history = model.fit(X_train, y_train, epochs=100, verbose=False, validation_data=(X_test, y_test), batch_size=10)

loss, accuracy = model.evaluate(X_train, y_train, verbose=False)

错误回溯

在 [24] 中:history = model.fit(X_train, y_train, epochs=100, verbose=False, validation_data=(X_test, y_test), batch_size=10) WARNING:tensorflow:falling back from v2 loop because of error: Failed to查找可以处理输入的数据适配器:<class 'scipy.sparse.csr.csr_matrix'>, <class 'NoneType'> Traceback(最近一次调用最后一次):

文件“<ipython-input.....>”,第 1 行,history = model.fit(X_train, y_train, epochs=100, verbose=1, validation_data=(X_test, y_test), batch_size=10)

文件“D:\Users\user1.conda\envs\env1\lib\site-packages\tensorflow_core\python\keras\engine\training.py”,第 728 行,适合 use_multiprocessing=use_multiprocessing

文件“D:\Users\user1.conda\envs\env1\lib\site-packages\tensorflow_core\python\keras\engine\training_arrays.py”,第 642 行,适合 shuffle=shuffle)

_standardize_user_data 中的文件“D:\Users\user1.conda\envs\env1\lib\site-packages\tensorflow_core\python\keras\engine\training.py”,第 2490 行,converted_x.append(_convert_scipy_sparse_tensor(a, b))

_convert_scipy_sparse_tensor return value.toarray() 中的文件“D:\Users\user1.conda\envs\env1\lib\site-packages\tensorflow_core\python\keras\engine\training.py”,第 3211 行

文件“D:\Users\user1.conda\envs\env1\lib\site-packages\scipy\sparse\compressed.py”,第 1025 行,in toarray out = self._process_toarray_args(order, out)

_process_toarray_args 中的文件“D:\Users\user1.conda\envs\env1\lib\site-packages\scipy\sparse\base.py”,第 1185 行,返回 np.zeros(self.shape, dtype=self.dtype,订单=订单)

MemoryError:无法为形状(930495、324044)和数据类型 int64 的数组分配 2.19 TiB

在[25]中:

标签: pythontensorflowkerasout-of-memorysparse-matrix

解决方案


推荐阅读