RNN python numpy内存错误

RNN python numpy内存错误,python,numpy,tensorflow,lstm,rnn,Python,Numpy,Tensorflow,Lstm,Rnn,该代码的目的是创建一个递归神经网络(RNN)来预测外汇市场走势的未来价值 数据集形状为(65524130),数据类型为“对象” 代码如下: from sklearn.preprocessing import MinMaxScaler from keras.layers.core import Dense, Activation, Dropout from keras.layers.recurrent import LSTM from keras.models import Sequential

该代码的目的是创建一个递归神经网络(RNN)来预测外汇市场走势的未来价值

数据集形状为(65524130),数据类型为“对象”

代码如下:

from sklearn.preprocessing import MinMaxScaler
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv(r"E:\Tutorial\FinalDF.csv", parse_dates=[0], index_col=[0], low_memory=False, dtype='unicode')
sequence_length = 500
n_features = len(df.columns)
val_ratio = 0.1
n_epochs = 3000
batch_size = 50

data = df.as_matrix()
data_processed = []
for index in range(len(data) - sequence_length):
    data_processed.append(data[index: index + sequence_length])
data_processed = np.array(data_processed)

val_split = round((1 - val_ratio) * data_processed.shape[0])
train = data_processed[:, int(val_split), :]
val = data_processed[int(val_split):, :]

print('Training data: {}'.format(train.shape))
print('Validation data: {}'.format(val.shape))



train_samples, train_nx, train_ny = train.shape
val_samples, val_nx, val_ny = val.shape

train = train.reshape((train_samples, train_nx * train_ny))
val = val.reshape((val_samples, val_nx * val_ny))

preprocessor = MinMaxScaler().fit(train)
train = preprocessor.transform(train)
val = preprocessor.transform(val)

train = train.reshape((train_samples, train_nx, train_ny))
val = val.reshape((val_samples, val_nx, val_ny))

X_train = train[:, : -1]
y_train = train[:, -1][:, -1]
X_val = val[:, : -1]
y_val = val[:, -1][:, -1]

X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], n_features))
X_val = np.reshape(X_val, (X_val.shape[0], X_val.shape[1], n_features))

model = Sequential()
model.add(LSTM(input_shape=(X_train.shape[1:]), units=100, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(100, return_sequences=False))
model.add(Dropout(0.25))
model.add(Dense(units=1))
model.add(Activation("relu"))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae', 'mse', 'accuracy'])

history = model.fit(
    X_train,
    y_train,
    batch_size=batch_size,
    epochs=n_epochs,
    verbose=2)

preds_val = model.predict(X_val)
diff = []
for i in range(len(y_val)):
    pred = preds_val[i][0]
    diff.append(y_val[i] - pred)

real_min = preprocessor.data_min_[104]
real_max = preprocessor.data_max_[104]
print(preprocessor.data_min_[:1])
print(preprocessor.data_max_[:1])

preds_real = preds_val * (real_max - real_min) + real_min
y_val_real = y_val * (real_max - real_min) + real_min

plt.plot(preds_real, label='Predictions')
plt.plot(y_val_real, label='Actual values')
plt.xlabel('test')
plt.legend(loc=0)
plt.show()
print(model.summary())
以下是错误:

使用TensorFlow后端

回溯(最近一次呼叫最后一次):

文件“E:/Tutorial/new.py”,第20行,在

已处理数据=np.数组(已处理数据)

MemoryError

注意:通过仔细调试,在注释中解决了此问题

根据我的经验,记忆错误来自三个地方之一:

  • 非常惊人的巨大数据集
  • Sho bhlzim,灵魂的黑暗食客和左脚袜子
  • 内存泄漏
如果你不介意把手弄脏的话,所有这些都有解决办法

内存渗漏体 这些都是由一段代码没有正确关闭造成的。一个例子是叉式炸弹:

import os
while True:
  os.fork
对我来说,典型的例子是TI Basic。做

:Lbl A
:If True
:Then
:Goto A
:End
将在If语句处打开堆栈上的一个帧,然后直接转到Lbl,而不通过End语句再次关闭它。是的,我知道这不太准确,但已经足够接近了

无论如何,打开文件而不关闭它们也会使堆栈崩溃。很多东西都可以

解决方法:找到它,杀死它。你别无选择。也可能是一些流重写

Sho bhlzim,灵魂的食客 你需要一个佛教僧侣,一个天主教神父,四只山羊,一个五角星,一个五角星,六支耳垢蜡烛,还有六页的死书。哪六个不重要。好吗?现在读读它们,按照疯狂的幻象说的去做

庞大的数据集 这些实际上很容易测试。首先,您的数据集看起来庞大吗?上面有大于2^15的数字吗?是的,你最好从这里开始。第二,如果您尝试一个类似但小得多的示例数据集,错误会消失吗?那么你的数据集就太大了

现在,你如何解决这个问题?抓起你可靠的耳垢蜡烛。。。哎哟,你为什么还留着这个?扔掉它!好的,所以您需要获取数据集并将其分解为许多小块。在这个问题上,它是一个正在训练的人工智能,因此每个(相对较小的)训练数据都可以是它自己的文件。不过,这种拼图可能会变得非常混乱,因此您需要先看看是否可以重写代码以使用更少的内存


最后,内存错误是由内存不足引起的,这并不奇怪。以牺牲速度为代价增加内存的优化在这方面很有价值

还有,你。。。只有6MB内存?mb,对吗?比如说,不是gb?你挖出了哪种公羊这么小的恐龙?@JakobLovern HAHAHA为这个错误感到抱歉,它的6GbI有点担心。不管怎样,您在每个单元格中存储的是什么类型的内容?当您在较小的数据集上尝试代码时,是否仍会出现错误?如果是这样,那就是内存泄漏。如果不是,那么你只是太大的数据集,你应该考虑划分它。具体地说,如果这个神经网络的工作方式和普通的一样,只需从磁盘中一个单元一个单元地提取数据来训练人工智能。虽然。。。你可能需要一些严重的低级黑客来完成这样的特技。好吧,这是一个不同于内存错误的问题。为了将来有问题的人,我希望你能将你的编辑和问题的词组回滚到memoryerror上,然后调试你的代码并作为新问题再次发布。我将发布这个问题的答案,这样它就可以从未回答的队列中退出。