Keras 如何解决这个内存错误的问题?

Keras 如何解决这个内存错误的问题?,keras,conv-neural-network,Keras,Conv Neural Network,因此,我有一条错误消息,它破坏了我工作的所有乐趣: 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

因此,我有一条错误消息,它破坏了我工作的所有乐趣:

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
模型拟合函数是我代码中的问题,它应该训练我的预配置模型并返回一个历史对象(训练的记录)。我尝试了np.array和np.asarray,得到了相同的错误消息。
如果有人认为模型的摘要有帮助,我会发布它。

我解决了这个问题。实际上,我更改了列表“X_train”(从(218128740,1)到(128740,1))中数据的形状。
我发现,多亏了Keras,它会自动添加另一个轴,并将我的数据注入到网络中,即使有更多的数据,np.asarray也能很好地工作

欢迎来到SO。请提供一个最小、完整且可验证的示例。向我们展示您最近一次尝试的代码以及您被卡住的地方。并解释为什么结果不是你所期望的。编辑您的问题以包含代码,请不要将其添加到注释中,因为它可能无法阅读。问题总是由np.asarray或np.array来解决。问题仍然存在。X_-train、Y_-train、X_-test和Y_-test是一个数组列表。只有在将X_-train和Y_-train从一个列表转换为一个数组(它们是一个包含174个数组的列表)时才会出现问题。X_-test(包含44个数组的列表)没有这个问题。只有当我要将一个大的数据列表转换为数组时,才会出现问题。要转换的列表中的每个数组有多大?您的集合是否可能包含循环引用,这可能意味着您正在尝试创建无限多的对象。
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])