python读取数据校验数据_python 读写数据

开源标准数据集 —— mnist(手写字符识别)

1. 使用 python 读取和解析 mnist.pkl.gz

import pickle

import gzip

from PIL import Image

def load_data():

with gzip.open('./mnist.pkl.gz') as fp:

training_data, valid_data, test_data = pickle.load(fp)

return training_data, valid_data, test_data

training_data, valid_data, test_data = load_data()

print len(training_data[0])

print len(valid_data[0])

print len(test_data[0])

print len(training_data[0][0])

I = training_data[0][0]

I.resize((28, 28))

im = Image.fromarray((I*256).astype('uint8'))

im.show()

im.save('5.png')

可以看出,mnist.pkl.gz 分为训练集,校验集和测试集;

使用 PIL 中的图像相关 api,我们可对其中的图像显示出来并保存;

2. Python中的单行、多行、中文注释

在大量的数据处理或者计算机视觉的文献和著作中,我们常见如下的数据集可视化(甚至对参数也可进行可视化,毕竟图像的本质是二维数组),通过文章末尾的代 码我们发现只需对布局及间距的慎重设置,便可对大量丰富的图像以”地板贴砖(tiles on a floor)”的形式进行组织,也即可视化,展示数据或相关工作,可以起到十分直观的效果,下图即是对深度神经网络的权值矩阵进行的贴砖可视化:

def normalize(darr, eps=1e-8):

# normalize(x) = (x-min)/(max-min)

darr -= darr.min()

darr *= 1./(darr.max()+eps)

return darr

def tile_raster_images(X, image_shape, tile_shape,

tile_spacing=(0, 0), normalize_rows=True, output_pixel_vals=True):

# image_shape:每一个砖的高和宽,

# tile_shape:在横纵两个方向上分别有多少砖

# tile_spacing:砖与砖之间的距离

# normalize_rows:是否对砖进行归一化

# output_pixel_vals:是否对砖以图像的形式进行显示

assert len(image_shape) == 2

assert len(tile_shape) == 2

assert len(tile_spacing) == 2

# 对参数进行断言,确保它们都是二维元组

output_shape = [

(ishp + tsp)*tshp-tsp

for ishp, tshp, tsp in zip(image_shape, tile_shape, tile_spacing)

]

# image_shape == (28, 28) mnist data

# tile_shape == (10, 10), tile_spacing == (1, 1)

# [(28+1)*10-1]*[(28+1)*10-1]

H, W = image_shape

Hs, Ws = tile_spacing

dt = 'uint8' if output_pixel_vals else X.dtype

# python 风格的三目运算符

output_array = numpy.zeros(output_shape, dtype=dt)

# 开始贴砖

for i in range(tile_shape[0]):

for j in range(tile_shape[1]):

if i*tile_shape[1]+j < X.shape[0]:

# X的每一行是一个图像(二维)flatten后的(一维的行向量)

this_x = X[i*tile_shape[1]+j]

this_image = normalize(this_x.reshape(image_shape)) if normalize_rows else this_x.reshape(image_shape)

c = 255 if output_pixel_vals else 1

output_array[

i*(H+Hs):i*(H+Hs)+H, j*(W+Ws):j*(W+Ws)+W

] = this_image*c

return output_array

import numpy

from PIL import Image

X = numpy.random.randn(500, 28*28)

arr = tile_raster_images(X, image_shape=(28, 28),

tile_shape=(12, 12), tile_spacing=(1, 1))

img = Image.fromarray(arr)

img.show()

img.save('./砖块可视化.png')

# 这里也可使用 matplotlib 进行显示

# plt.imshow(img, cmap='gray')

# plt.show()

可视化可以更直观的观察数据,让工作更加高效。

3. 数据可视化,贴砖

一、python单行注释符号(#)

示例:#this is a comment

二、批量、多行注释符号

多行注释是用三引号”’ ”’包含的,引号可以使单引号也可以是双引号

例如:

'''

ABC

ABC

ABC

'''

"""

ABC

ABC

ABC

"""

三、python中文注释方法

如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明。把ChineseTest.py文件的编码重新改为ANSI,并加上编码声明:

一定要在第一行或者第二行加上这么一句话:

#coding=utf-8

# -*- coding: utf-8 -*-

我刚开始加上了依然出错,是因为我的py文件的前三行是注释声明,我把这句话放在了第四行,所以依然报错。

py脚本的前两行一般都是:

#!/usr/bin/python

# -*- coding: utf-8 -*-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值