【发布时间】:2018-09-04 12:49:06
【问题描述】:
所以我收到这条错误消息,破坏了我工作的所有乐趣:
Traceback (most recent call last):
File "C:\Python\Python36\Scripts\Masterarbeit-1308\CNN - Kopie.py", line 97, in <module>
model.fit(np.asarray(X_train), np.asarray(Y_train), batch_size=32, epochs=100, verbose=1, validation_data=(np.asarray(X_test), np.asarray(Y_test)))
File "C:\Users\\****\AppData\Roaming\Python\Python36\site-packages\numpy\core\numeric.py", line 492, in asarray
return array(a, dtype, copy=False, order=order)
MemoryError
有人对此有解决方案吗? 我在一台具有 16 GB RAM 的机器 i7 第 7 代上工作。
为了解释更多,这是我的代码,它将所有数组列表 (.npy) 从声音频谱图转换为 .npy 并保存在 Input-CNN 中:
import os, numpy as np
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, Activation, Flatten, Conv2D, Dropout, Dense
from keras.layers.normalization import BatchNormalization
import tensorflow as tf
from sklearn.utils import shuffle
from sklearn.cross_validation import train_test_split
from keras.utils import to_categorical
folder = 'D:\InputCNN - Copie'
folder1 = 'C:\Python\Python36\Scripts\Masterarbeit-1308\Data'
from keras import backend as K
My_Data = os.listdir(folder)
num_data= len(My_Data)
Classnames = os.listdir(folder1)
class_num = len(Classnames)
arr =[np.load(os.path.join(folder, filename), fix_imports=True) for filename in os.listdir(folder)]
labels = np.ones((num_data,))
labels[0:31]= 0
labels[31:80] = 1
labels[80:128] = 2
labels[128:131] = 3
labels[131:143] = 4
labels[143:157] = 5
labels[157:209] = 6
labels[209:] = 7
Y = to_categorical(labels,class_num)
x, y = shuffle(arr, Y, random_state=2)
dataset = tf.data.Dataset.from_tensor_slices(My_Data)
X_train, X_test, Y_train, Y_test = train_test_split(x, Y, test_size=0.2)
##
def build_model(idx,X,Y,nb_classes):
K.set_image_data_format('channels_last')
nb_filters = 64 # number of convolutional filters to use
pool_size = (2, 2) # size of pooling area for max pooling
kernel_size = (3, 3) # convolution kernel size
nb_layers = 4
input_shape = (X[idx].shape[1], X[idx].shape[2], X[idx].shape[3])
model = Sequential()
model.add(Conv2D(nb_filters, kernel_size, padding='valid', input_shape=input_shape))
model.add(BatchNormalization(axis=1))
model.add(Activation('relu'))
for layer in range(nb_layers-1):
model.add(Conv2D(nb_filters, kernel_size, padding='valid', input_shape=input_shape))
model.add(BatchNormalization(axis=1))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.6))
model.add(Dense(nb_classes, activation='sigmoid'))
return model
for idx in range(len(X_train)-1):
model = build_model(idx,X_train,Y_train, class_num)
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
model.fit(np.array(X_train), np.array(Y_train), batch_size=8, epochs=100, verbose=1, validation_data=(np.array(X_test), np.array(Y_test))) #Here I have the problem
score = model.evaluate(np.array(X_test), np.array(Y_test), verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
模型拟合函数是我的代码中的问题,它应该训练我的预配置模型并返回一个历史对象(训练记录)。我尝试了 np.array 和 np.asarray 并且得到了相同的错误消息。 如果有人认为模型的总结有帮助,我会发布它。
【问题讨论】:
-
欢迎来到 SO。请提供一个最小、完整和可验证的示例。 向我们展示您最近尝试的代码以及您遇到的问题。并解释为什么结果不是你所期望的。编辑您的问题以包含代码,请不要在评论中添加它,因为它可能不可读。 stackoverflow.com/help/mcve
-
问题总是出在 np.asarray 或 np.array 上。问题仍然存在。 X_train、Y_train、X_test 和 Y_test 是一个数组列表。
-
只有在将 X_train 和 Y_train 从列表转换为数组时才会出现问题(它们是 174 个数组的列表}。我对 X_test(44 个数组的列表)没有这个问题。问题来了仅当我想将大量数据转换为数组时。
-
您要转换的列表中的每个数组有多大?您的集合是否可能包含循环引用,这可能意味着您正在尝试创建无限数量的对象。