deep learning with Python(弗朗索瓦·肖莱) 笔记(二)

第二章:神经网络的数学基础

使用keras进行MNIST手写体进行分类:

1.加载数据集:

from keras.datasets import mnist

(train_images,train_labels), (test_images,test_labels)=mnist.load_data()

查看数据;

train_images.shape

 (60000,28,28)

2.网络架构:

from keras import models

from keras import layers

 

network=models.Sequential()

network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))

network.add(layers.Dense(10,activation='softmax'))

Dense为全连接层,512表示输入数据大小,激活函数增加非线性能力。

10路softmax将返回一个由10个概率值组成的数组,每个概率值表示当前图像属于某一个类别的概率。

 

3.编译步骤:(损失函数,优化器监控指标metric(比如精度))

network.compile(optimizer='rmsprop',

                          loss='cattegorical_crossentropy'

                          metrics=['accuracy'])

 

4.准备图像数据

train_images=train_images.reshape((60000,28*28))

train_images=train_images.astype('float32')/255

test_images = test_images.reshape((10000, 28 * 28))

test_images = test_images.astype('float32') / 255 

将数据转换为float32数组,取值在0·1之间。

 

5.对标签进行编码分类

from keras.utils import to_categorical 
 
train_labels = to_categorical(train_labels)

test_labels = to_categorical(test_labels)

 

6.训练(keras调用拟合(fit)实现)

network.fit(train_images,train_labels,epochs=5,batch_size=128)

显示训练的loss和acc,精度很快达到98.9%。

7.测试

test_loss,test_acc=network.evaluate(test_images,test_labels)

print('test_acc:',test_acc)

测试精度低于训练精度是因为:overfit过拟合。

8.显示某个数字

import matplotlib.pyplot as plt

plt.imshow(train_images[4],cmap=plt.cm.binary)

plt.show()

9.取出张量切片

my_slice=train_images[10:100] 形状为:

10.BATCH:

batch=train_images[:128]

 

 

 

 

神经网络的数据表示;

数据存于多维Numpy中,也叫做张量Tensor。

包含一个数字的张量叫做标量,有0个轴(维度)(阶)。

数字组成的数组叫做向量,或者一维张量。

一维张量,五个维度,五维向量。维度表示沿某个轴上的元素个数。

向量组成的数组叫矩阵,为2D张量,或者2维张量。

行列。

多个矩阵组成数组为3D张量。(立方体)

 

轴(阶)(ndim)

形状:(5,)(3,5)(3,3,5)

 

实际的数据张量:

向量数据:2D

时间序列:3D

图像:4D

 

视频:5D

 

基于梯度的优化

梯度是张量运算的导数,也是多元导数。

要找到损失函数的最小值时候的参数值(权重)。

进行反向传播,优化权重。

小批量SGD:随机梯度下降:随机:每批数据选取随机,逐个更新权重

图为一维情况。

网络只有一个参数,只有一个训练样本。

优化方法:动量,解决了收敛速度和局部极小点。

动量:考虑当前的梯度值也考虑上一次的参数更新。

 

反向传播算法:使用链式求导法则的算法。

链式求导法则:

梯度下降::例如:batch_size=128, epoch=5

1个数据输入一次,得到一个梯度,128个数据可以求损失函数的和的平均值,然后在求梯度,在更新权重,也就是更新了一次权重,这为一轮,总共进行5轮。

随机梯度下降:

1个数据输入一次,得到一个梯度,然后在求梯度,在更新权重,完成128次,也就是更新了128次权重,这为一轮,总共进行5轮。

随机为为什么会收敛更快:相当于每一轮更新128次参数,而梯度下降(求平均再更新)只是更新了一次。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值