【Tensorflow】怎样为你的网络预加工和打包训练数据?(二):小数据集的处理方案
2017-06-25 14:53
465 查看
实验环境:python2.7
第二篇我们来讲一讲小数据集的处理方法,小数据集一般多以文本存储为主,csv是一种流行的数据格式,另外也有txt等。当然也会有.mat或者.npy这种经过处理的格式。
为了工程需要我直接介绍读取该类型数据的最快方法,通过一些库,我们是可以用很少的步骤就读取进来训练的,这里用到的是一个各种数据操作方法的集合库,pandas。
下载pandas:
然后导入:
使用read_csv函数快速读取一个csv文件,到底有多方便?一句话就够了
此时返回的data我们可以看看它是长什么样的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/7e88b4e301a0e26825bae9a6b4e132e0)
我们再对比一下,csv文件中的数据:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/12e191764599a9c6e55ec0acdb673d2e)
这时候你应该发现问题了,读取csv的时候默认把第一行作为列标题读进来了,导致后续的数据就不对了,显然一句话搞定的东西会出现很多问题。注意数据集的特殊性,iris数据集是不带有标题列的,所以我们就要说明一下,添加这一个参数:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/10302f18fad4f26aae3357d43e92c26a)
现在输出就对了,可以看到系统自动为列生成了一组索引,当然我们可以自定义索引的名字:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/c72945bf0721f4c985487a9cebdf49f1)
在数字前面加字符串
也可以分别指定具体的名字:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/6d395f308d7da7f37f71b51a4c8e834e)
让我们打印数据的格式看看:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/59862e8739d13347ad779305788bed5f)
可以看到具体元素的值是numpy的,但是其余的都还是pandas的自带格式,怎么转换呢,如下:
这样我们就把指定的几列转换为numpy数组了,但是,还是会出现一个问题,读取csv默认的元素type是np.float64,也就是说label也是np.float64类型的,处理方案可以对读取完毕的numpy数组处理,也可以读取的时候处理,如下:
完整程序如下,这里我用了np.squeeze来去掉长度为1的维度,这个应该好理解:
就这么几行,数据集就导入了!
二.txt的处理方法
和上面类似,txt文件也是可以用read_csv来处理的,因为两者的根本区别只是分隔符不同而已,举一个例子:在我的用tensorflow实现usps和mnist数据集的迁移学习使用到的数据集usps,我们将它下载下来,手工删除第一行10 256的分类说明和尾行的-1
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/6f18e7a3d630f8ff5650eeb984faf577)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/34e1945d7e8654a6751fac1ac5e13fb3)
因为这两行会影响我们结果的生成,然后调用:
数据就生成好了,这里我们指定了sep分割符的类型是空格或者多于一个空格,总共7291个样本,第一列为标签,后面256列分别表示像素值。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201706/7c8daeda46dcf49c91be0b923b8ab2c8)
当然你也可以像我在用tensorflow实现usps和mnist数据集的迁移学习中的做法一样,用python原生的方法读取,秀一秀你的代码技术
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/33c29e3268d66ef5c09858efe40a3635.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/33c29e3268d66ef5c09858efe40a3635.gif)
,但是做工程的话,还是以方便为主,一句话就搞定的事,何乐而不为呢?
三.延伸
补充一下,遇到csv较大内存不够的情况,可以尝试使用read_csv中的分成chunk分块读取的方案,这里我就不描述了(搞deep learning的我相信大家的内存都很大,不会被小小几个G难住吧,哈哈)
附上分块读取的解决方案,和read_csv函数参数的详解
参数详解:http://www.cnblogs.com/datablog/p/6127000.html
分块读取csv:http://blog.csdn.net/zm714981790/article/details/51375475
第二篇我们来讲一讲小数据集的处理方法,小数据集一般多以文本存储为主,csv是一种流行的数据格式,另外也有txt等。当然也会有.mat或者.npy这种经过处理的格式。
一.处理csv格式数据集
实验数据集是鸢尾花卉数据集iris,格式是.csv,需要的同学可以到这里下载为了工程需要我直接介绍读取该类型数据的最快方法,通过一些库,我们是可以用很少的步骤就读取进来训练的,这里用到的是一个各种数据操作方法的集合库,pandas。
下载pandas:
sudo pip install pandas
然后导入:
import pandas
使用read_csv函数快速读取一个csv文件,到底有多方便?一句话就够了
data = pandas.read_csv("iris.csv")
此时返回的data我们可以看看它是长什么样的:
我们再对比一下,csv文件中的数据:
这时候你应该发现问题了,读取csv的时候默认把第一行作为列标题读进来了,导致后续的数据就不对了,显然一句话搞定的东西会出现很多问题。注意数据集的特殊性,iris数据集是不带有标题列的,所以我们就要说明一下,添加这一个参数:
data = pandas.read_csv("iris.csv", header=None)
现在输出就对了,可以看到系统自动为列生成了一组索引,当然我们可以自定义索引的名字:
data = pandas.read_csv("iris.csv", header=None, prefix='col')
在数字前面加字符串
也可以分别指定具体的名字:
data = pandas.read_csv("iris.csv", header=None, names=['atr1','atr2','atr3','atr4','label'])
让我们打印数据的格式看看:
print type(data) print type(data["atr1"]) print type(data["atr1"][0])
可以看到具体元素的值是numpy的,但是其余的都还是pandas的自带格式,怎么转换呢,如下:
train_data = data.as_matrix(columns=['atr1','atr2','atr3','atr4']) label = data.as_matrix(columns=['label']) print train_data,label
这样我们就把指定的几列转换为numpy数组了,但是,还是会出现一个问题,读取csv默认的元素type是np.float64,也就是说label也是np.float64类型的,处理方案可以对读取完毕的numpy数组处理,也可以读取的时候处理,如下:
data = pandas.read_csv("iris.csv", header=None, names=['atr1','atr2','atr3','atr4','label'], dtype={'label':np.int8})
完整程序如下,这里我用了np.squeeze来去掉长度为1的维度,这个应该好理解:
import pandas
import numpy as np
data = pandas.read_csv("iris.csv", header=None, names=['atr1','atr2','atr3','atr4','label'], dtype={'label':np.int8})
train_data = data.as_matrix(columns=['atr1','atr2','atr3','atr4'])
label = data.as_matrix(columns=['label'])
label = np.squeeze(label)
就这么几行,数据集就导入了!
二.txt的处理方法
和上面类似,txt文件也是可以用read_csv来处理的,因为两者的根本区别只是分隔符不同而已,举一个例子:在我的用tensorflow实现usps和mnist数据集的迁移学习使用到的数据集usps,我们将它下载下来,手工删除第一行10 256的分类说明和尾行的-1因为这两行会影响我们结果的生成,然后调用:
data = pandas.read_csv("usps_train.jf", sep='\s+', header=None)
数据就生成好了,这里我们指定了sep分割符的类型是空格或者多于一个空格,总共7291个样本,第一列为标签,后面256列分别表示像素值。
当然你也可以像我在用tensorflow实现usps和mnist数据集的迁移学习中的做法一样,用python原生的方法读取,秀一秀你的代码技术
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/33c29e3268d66ef5c09858efe40a3635.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/33c29e3268d66ef5c09858efe40a3635.gif)
,但是做工程的话,还是以方便为主,一句话就搞定的事,何乐而不为呢?
三.延伸
补充一下,遇到csv较大内存不够的情况,可以尝试使用read_csv中的分成chunk分块读取的方案,这里我就不描述了(搞deep learning的我相信大家的内存都很大,不会被小小几个G难住吧,哈哈)附上分块读取的解决方案,和read_csv函数参数的详解
参数详解:http://www.cnblogs.com/datablog/p/6127000.html
分块读取csv:http://blog.csdn.net/zm714981790/article/details/51375475
相关文章推荐
- 【Tensorflow】怎样为你的网络预加工和打包训练数据?(一)
- 利用tensorflow训练自己的图片数据(3)——建立网络模型
- Tensorflow框架下Faster-RCNN实践(二)——用自己制作的数据训练Faster-RCNN网络(附代码)
- Tensorflow 训练自己的数据集(一)(数据直接导入到内存)
- Tensorflow学习教程------读取数据、建立网络、训练模型,小巧而完整的代码示例
- 网络请求数据加密,验签处理方案
- 利用tensorflow训练自己的图片数据(2)——输入图片处理
- [机器学习] 机器学习中训练数据不平衡问题处理方案汇总
- WebService - 怎样提高WebService性能 大数据量网络传输处理
- 用Tensorflow处理自己的数据:制作自己的TFRecords数据集
- 神经网络训练之数据归一化处理
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集
- Tensorflow 训练自己的数据集将数据直接导入到内存
- 利用tensorflow训练自己的图片数据(2)——输入图片处理
- matconvnet环境下训练自己的数据集及模型测试-mnist网络结构-cifar10部分数据集
- tensorflow保存网络参数 使用训练好的网络参数进行数据的预测
- 利用tensorflow训练自己的图片数据(5)——测试训练网络
- UITableView 显示大量网络数据时怎样处理反应过慢的方法
- 使用TensorFlow训练神经网络识别MNIST数据代码
- .net多语言和数据集内多数据表的处理(2)