Pandas 如何在RNN TensorFlow中使用非常大的数据集?

Pandas 如何在RNN TensorFlow中使用非常大的数据集?,pandas,machine-learning,tensorflow,dataset,data-processing,Pandas,Machine Learning,Tensorflow,Dataset,Data Processing,我有一个非常大的数据集:7.9GB的CSV文件。其中80%作为培训数据,其余20%作为测试数据。当我加载训练数据(6.2GB)时,我在第80次迭代(第80个文件)时有MemoryError。下面是我在加载数据时使用的脚本: import pandas as pd import os col_names = ['duration', 'service', 'src_bytes', 'dest_bytes', 'count', 'same_srv_rate', 'serror_ra

我有一个非常大的数据集:7.9GB的CSV文件。其中80%作为培训数据,其余20%作为测试数据。当我加载训练数据(6.2GB)时,我在第80次迭代(第80个文件)时有
MemoryError
。下面是我在加载数据时使用的脚本:

import pandas as pd
import os

col_names = ['duration', 'service', 'src_bytes', 'dest_bytes', 'count', 'same_srv_rate',
        'serror_rate', 'srv_serror_rate', 'dst_host_count', 'dst_host_srv_count',
        'dst_host_same_src_port_rate', 'dst_host_serror_rate', 'dst_host_srv_serror_rate',
        'flag', 'ids_detection', 'malware_detection', 'ashula_detection', 'label', 'src_ip_add',
        'src_port_num', 'dst_ip_add', 'dst_port_num', 'start_time', 'protocol']

# create a list to store the filenames
files = []

# create a dataframe to store the contents of CSV files
df = pd.DataFrame()

# get the filenames in the specified PATH
for (dirpath, dirnames, filenames) in os.walk(path):
    ''' Append to the list the filenames under the subdirectories of the <path> '''
    files.extend(os.path.join(dirpath, filename) for filename in filenames)

for file in files:
    df = df.append(pd.read_csv(filepath_or_buffer=file, names=col_names, engine='python'))
    print('Appending file : {file}'.format(file=files[index]))

pd.set_option('display.max_colwidth', -1)
print(df)
将熊猫作为pd导入
导入操作系统
列名称=['duration'、'service'、'src_bytes'、'dest_bytes'、'count'、'same_srv_rate',
‘错误率’、‘srv错误率’、‘dst主机计数’、‘dst主机srv计数’,
‘dst_主机相同_src_端口_比率’、‘dst_主机错误率’、‘dst_主机错误率’,
“标志”、“ids_检测”、“恶意软件_检测”、“ashula_检测”、“标签”、“src_ip_添加”,
“src_端口号”、“dst_ip_添加”、“dst_端口号”、“开始时间”、“协议”]
#创建一个列表来存储文件名
文件=[]
#创建数据框以存储CSV文件的内容
df=pd.DataFrame()
#获取指定路径中的文件名
对于os.walk(路径)中的(目录路径、目录名、文件名):
''将“”子目录下的文件名附加到列表中'
files.extend(文件名中文件名的os.path.join(dirpath,filename)
对于文件中的文件:
df=df.append(pd.read\u csv(filepath\u或\u buffer=file,names=col\u names,engine='python'))
打印('Appending file:{file}'。格式(file=files[index]))
pd.set_选项('display.max_colwidth',-1)
打印(df)

6.2 GB的CSV文件中有130个文件。

对于大型数据集,我们可能已经将6.2GB计算为大型数据集,一次读取所有数据可能不是最好的主意。由于您将要一批一批地训练您的网络,因此只加载下一个要使用的批所需的数据就足够了

提供了有关如何实现数据读取管道的良好概述。根据相关文件,阶段包括:

  • 文件名列表
  • 可选文件名洗牌
  • 可选纪元限制
  • 文件名队列
  • 文件格式的读取器
  • 读取器读取的记录的解码器
  • 可选预处理
  • 示例队列

  • 我赞同纽约警察局的回答,只是我还没有足够的声誉来添加评论。此外,在运行任务管理器时,打开任务管理器或等效工具并观察系统的已用内存可能会让您感兴趣。我猜,当你的内存完全填满时,你就会犯错误

    TensorFlow支持队列,它允许您一次只读取部分数据,以免耗尽内存。Nyps链接的文档中有这方面的示例。此外,TensorFlow最近添加了一种新的方法来处理中的输入数据集


    此外,我建议您将所有数据转换为TensorFlow的TFRecord格式,因为它将节省空间,并且与在培训时将CSV文件转换为Tensor相比,可以将数据访问速度提高100倍以上。

    谢谢,@John Scolaro。甚至在我提出我的问题之前,我已经在阅读纽约警察局发布的文档了。但我还没读完呢。谢谢你们两位!:)观察记忆绝对是一个很好的观点。有人可能会提到,8GB的RAM通常不足以加载6.xGB的数据,因为RAM也被其他程序使用。是的。:)特别是如果它是CSV文件,因为TensorFlow中的CSV处理功能再次增加了更多开销。我现在正在编写一个脚本,将我的CSV文件转换为TFR记录。非常感谢。将很快向您更新!:)祝你好运,朋友!如何处理TB级的数据?@RemisHaroon相同的答案:以批处理方式处理数据。如果由于内存限制,您甚至无法加载单个文件,请尝试拆分数据文件,并考虑更有效的数据表示。好的,拆分数据,但如何拆分?手动?还是已经有了一个工具,好吧,那在分开之后呢?按顺序处理批次?还是并行分布方式?是否有任何工具/框架用于此?如何处理TB的数据?