深度学习1.0_权重


一张图像输入到计算机中会表示成 “H(长),W(宽),C(通道)”和像素点,上图的就是长300,宽100,通道为3,然后用像素点表示的的图片2.图像受光照强度,角度,部分遮蔽,形状改变,背景混入的影响。

3.机器学习常规套路,(1)数据收集,给定标签即告诉计算机什么是猫什么是狗,打上一个标签(2)训练一个分类器(3)测试评估

深度学习1.0_神经网络_02

深度学习1.0_神经网络_03


4.找到最好参数(交叉验证)

Train

Val

Test 永远用不上

Train :test =9:1

深度学习1.0_权重_04


深度学习1.0_权重_05


如上图,1-4进行建模,5用来验证

深度学习1.0_权重_06

训练集标注:

图像标注:x,:图像,由像素点组成;w:得分值,那些像素点重要,那些不重要

将32323转换为一组列向量,W每个像素点的权重参数,

所以矩阵为32323的行向量;最终为13072(行)30721(列)=11的向量,即得到的是一个类别的得分;

若是103072即可得到是个类别的的得分值
b:偏置项(val)

深度学习1.0_初始化_07

三分类,四个像素低啊,故权重向量W=4(像素点)3(类别数),xi=41

深度学习1.0_初始化_08


损失函数:迭代优化

深度学习1.0_神经网络_09

将得分换成概率
将负无穷到正无穷的输入映射为0-1的数即可表示概率

深度学习1.0_权重_10

将得分函数经过指数函数进行放大,再进行归一化,等于猫的概率越大越好(0-1)。
Li的log函数只对正确的类别的概率进行处理,离0越近损失越大,离0越远损失越小,即可定义损失函数。对应log函数图像

深度学习1.0_初始化_11


将得分函数经过指数函数进行放大,再进行归一化,等于猫的概率越大越好(0-1)。
Li的log函数只对正确的类别的概率进行处理,离0越近损失越大,离0越远损失越小,即可定义损失函数。对应log函数图像

深度学习1.0_初始化_12


梯度下降
为了到达损失函数最小
沿着梯度的反方向,每次走的步长

深度学习1.0_权重_13


3.批处理Bachsize
梯度下降时,传进来一大批图像取平均再确定更新方向

深度学习1.0_初始化_14

4.学习率要偏低,也可以在最开始学习率高一些,然后随着迭代次数增加,把学习率调低
Epoch=5万(训练总数)/100(bachsize)=500;执行500次迭代,每次迭代进行批处理100个数据

深度学习1.0_神经网络_15

深度学习1.0_权重_16

深度学习1.0_神经网络_17

深度学习1.0_神经网络_18

神经网络由前向传播,反向传播,反向传播改变W。如下图

深度学习1.0_神经网络_19

由三个组成,输入层,隐藏层输出层。

深度学习1.0_权重_20

输入是原始数据,hidden layer将三维输入转化为四维特征,用全连接操作,连接的每条线就是权重参数。
神经网络好的表达是因为他的非线性,神经网路经过每个隐藏层都要经过他的激活函数,即要经过一系列的激活函数。

深度学习1.0_初始化_21


反向传播能逐层求解,对中间层的层数对结果的影响可以用https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html 这个网址观察中间是隐层中改变神经网络个数,1个神经元权重参数3

1的矩阵,中间有2个神经元权重参数矩阵32中间有三个神经元权重参数矩阵式33,过拟合:神经网络为满足个别点,决策边界为了满足个别分割点而发生奇怪的分割

深度学习1.0_权重_22

正则化:是惩罚参数,随着惩罚参数的变化越来越平滑3.激活函数:随着数增大sIGMOID函数接近于1,梯度约等于0,反向传播就就变成0不能更新

深度学习1.0_初始化_23

Relu函数:max(0,x)梯度传播直接传给大的数

深度学习1.0_权重_24

4.数据预处理

对于原始数据:原始数据是杂乱无章的,用x-x的维度上的均值,用y-y维度上的均值得到的就是以0为中心化

深度学习1.0_神经网络_25

此时,x方向上的差异比较小,Y方向上的差异比较大,利用relue函数的时候,会认为Y的比较重要,但一开始的时候这俩是一样重要的,所以需要进行归一化。5.权重初始化

权重初始化不能值一样不然会前向传播一样,反向传播也一样,参数朝着一个方向去更新

深度学习1.0_神经网络_26


所以采用高斯初始化,以0为均值,指定一个小的标准差。6.Drop -out:防止神经网络过拟合

随机选择神经元的保留和删除,但比列是可以指定的,一般保留百分之50-60

Tensorflow中0.6是指保留百分之60的神经元。

深度学习1.0_权重_27

Tensorflow基本操作,当我们拿到一个值得时候,要把它转化成支持tenorflow计算的格式 。

(1)用tf创建变量,将list格式的行向量转化成tf所能支持的

x=tf.Variable([1,2])

a=tf.constant([3,3])

(2)#减法op

sub=tf.subtract(x,a)

(3)以上只是创建了一个可执行域,要用的话要对用到的进行全局变量初始化

#tensorflow中变量使用前必须初始化
init=tf.global_variables_initializer()
(4)以上虽然写了全部功能但实际未执行需用:
with tf.Session() as sess:
#会话2先初始化变量
sess.run(init)
print(sess.run(sub))
print(sess.run(add))
(5)随机高斯初始化
norm = tf.random_normal([2, 3], mean=-1, stddev=4) (,均值,标准差)
(6)shuffe操作

Shuffle the first dimension of a tensor

c = tf.constant([[1, 2], [3, 4], [5, 6]])
shuff = tf.random_shuffle©
(7)将numpy转换成tf格式
import numpy as np
a = np.zeros((3,3))
ta = tf.convert_to_tensor(a)
(8)每次传输的数据不同但大小一样,placeholder先固定好数据,传值实在run里进行操作
input1 = tf.placeholder(tf.float32)#gu固定好数据大小
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
feed_dict名字不不能改,按人家的来

二、Tensorflow线性回归

(1)画图库

import matplotlib.pyplot as plt

1.神经网络读热编码 one_hot=True:

即数字0-10,选中那个数字置1,其余位置0

深度学习1.0_神经网络_28


3.简单神经网络搭建

NETWORK TOPOLOGIES

n_hidden_1 = 256

n_hidden_2 = 128

n_input = 784

n_classes = 10

深度学习1.0_权重_29

指定placeholder类型,指定float类型,维度none,实际等于batchsiiize.a,输入大小必须一致,n_input

INPUTS AND OUTPUTS

x = tf.placeholder(“float”, [None, n_input])
y = tf.placeholder(“float”, [None, n_classes])#结果值

NETWORK TOPOLOGIES

n_hidden_1 = 256
n_hidden_2 = 128
n_input = 784
n_classes = 10
指定输入随机初始化

INPUTS AND OUTPUTS

x = tf.placeholder(“float”, [None, n_input])
y = tf.placeholder(“float”, [None, n_classes])

NETWORK PARAMETERS

stddev = 0.1
weights = {
‘w1’: tf.Variable(tf.random_normal([n_input, n_hidden_1], stddev=stddev)),
‘w2’: tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], stddev=stddev)),
‘out’: tf.Variable(tf.random_normal([n_hidden_2, n_classes], stddev=stddev))
}
初始化b
biases = {
‘b1’: tf.Variable(tf.random_normal([n_hidden_1])),
‘b2’: tf.Variable(tf.random_normal([n_hidden_2])),
‘out’: tf.Variable(tf.random_normal([n_classes]))
}
print (“NETWORK READY”)

设定预测值
pred = multilayer_perceptron(x, weights, biases)

选择sigmoid激活函数:(可改为relu)
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(_X, _weights[‘w1’]), _biases[‘b1’]))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, _weights[‘w2’]), _biases[‘b2’]))
损失函数:softmax_cross_entropy_with_logits(pred, y)

LOSS AND OPTIMIZER

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optm = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(cost)
corr = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accr = tf.reduce_mean(tf.cast(corr, “float”))

6.卷积神经网络分块提取

指定每28*28个单元格进行特征提取,一维,

深度学习1.0_初始化_30

深度学习1.0_初始化_31

为了得到更多特征需要多个filter

深度学习1.0_权重_32

深度学习1.0_神经网络_33

边缘填充:用0填充,使边缘和中间算的次数差不多

步长:每次移动多少个。特征结果不同

深度学习1.0_神经网络_34

不能整除向下取整,stride是步长,pad外层加0

深度学习1.0_初始化_35

深度学习1.0_初始化_36

深度学习1.0_神经网络_37

池化层:下采样减少原始输入的大小

最大池化:将特征图变化,指定大小后选取每个部分最大的数据放入新设定的特征

深度学习1.0_神经网络_38

P4-6重点看、

Drop out =0.。。。保留率

深度学习1.0_神经网络_39

深度学习1.0_权重_40

深度学习1.0_权重_41