【问题标题】:How to solve this problem of Memory error?如何解决这个内存错误问题?
【发布时间】: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 个数组的列表)没有这个问题。问题来了仅当我想将大量数据转换为数组时。
  • 您要转换的列表中的每个数组有多大?您的集合是否可能包含循环引用,这可能意味着您正在尝试创建无限数量的对象。

标签: keras conv-neural-network


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2013-11-23
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多