这几个库现在更新了,用书上的会出错,未解决,建议直接学新的
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 14 09:09:58 2018
@author: asus
"""
#11 用深度学习方法为图像中的物体进行分类
import os
batch1_filename = os.path.join(
"E:\\books\Python数据挖掘入门与实践\用深度学习方法为图像中的物体进行分类",
"cifar-10-batches-py", "data_batch_1")
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
batch1 = unpickle(batch1_filename)
#这一批图像文件读进来后为一个字典结构,包含numpy数组形式的图像数据、图像类别、文件名
#以及该批文件的简短说明(training batch 1 of 5 表示训练集共五批,这是第一批)。
#提取一张图像
image_index = 100
image = batch1[b'data'][image_index]
#图像数据格式与matplotlib(绘制图像)所使用的有所不同,因此,要改变数组形状,对矩阵进行
#转换。
image = image.reshape((32, 32, 3), order='F')
import numpy as np
image = np.rot90(image, -1)
#之后,就可以用matplotlib绘制图像
%matplotlib inline
from matplotlib import pyplot as plt
plt.imshow(image)
#11.3 深度神经网络
#深度神经网络和基本神经网络的差别在于规模大小。至少包含两层隐含层的神经网络被称为深度
#神经网络。实际工作者遇到的深度神经网络通常规模很大,每层神经元数量和层次都非常多。
#神经网络接收很基础的特征作为输出——就计算机视觉而言,输入为简单的像素值。神经网络算法
#把这些数据整合起来向网络中传输,在这个过程中,基本的特征组合为复杂的特征。计算机依靠
#它们进行分类。
#11.3.3 Theano简介
#Theano使用来创建和运行数学表达式的工具。在Theano中,我们定义函数要做什么而不是怎么做
#这样才能以最佳的方式对表达式进行求值。
#我们可以用Theano来定义函数,处理标量、数组和矩阵以及其他数学表达式。如我们可以创建计
#算直角三角形斜边长度的函数。
import theano
from theano import tensor as T
a = T.dscalar() #标量
b = T.dscalar()
c = T.sqrt(a ** 2 + b ** 2) #c是一个表达式,即不是函数,也不是数值
f = theano.function([a,b], c) #函数 f(3,4)
#这个函数接收a、b,返回经过计算得到的结果,也就是输出值c
#11.3.4 Lasagne简介
#该库是专门用来构建神经网络的,实践了几种比较新的神经网络层和组成这些层的模块
#内置网络层(Network-in-network layers):这些小神经网络比传统的神经网络层更容易解释。
#删除层(Dropout layers):训练过程随机删除神经元,放置产生神经网络常见的过拟合问题。
#噪音层(Noise layers):为神经元引入噪音,也是为了解决过拟合问题。
#本章使用卷积层(convolution layers, 层级结构模拟人类视觉工作原理)。卷积层使用少量的
#相互连接的神经元,分析一部分输入值,便于神经网络实现对数据的标准转换,比如对图像数据
#的转换。视觉分析实验,就是用卷积层对图像进行转换。
#用第一章的Iris数据集测试卷积神经网络
from sklearn.datasets import load_iris
iris =