一张图像输入到计算机中会表示成 “H(长),W(宽),C(通道)”和像素点,上图的就是长300,宽100,通道为3,然后用像素点表示的的图片2.图像受光照强度,角度,部分遮蔽,形状改变,背景混入的影响。
3.机器学习常规套路,(1)数据收集,给定标签即告诉计算机什么是猫什么是狗,打上一个标签(2)训练一个分类器(3)测试评估
4.找到最好参数(交叉验证)
Train
Val
Test 永远用不上
Train :test =9:1
如上图,1-4进行建模,5用来验证
训练集标注:
图像标注:x,:图像,由像素点组成;w:得分值,那些像素点重要,那些不重要
将32323转换为一组列向量,W每个像素点的权重参数,
所以矩阵为32323的行向量;最终为13072(行)30721(列)=11的向量,即得到的是一个类别的得分;
若是103072即可得到是个类别的的得分值
b:偏置项(val)
三分类,四个像素低啊,故权重向量W=4(像素点)3(类别数),xi=41
损失函数:迭代优化将得分换成概率
将负无穷到正无穷的输入映射为0-1的数即可表示概率将得分函数经过指数函数进行放大,再进行归一化,等于猫的概率越大越好(0-1)。
Li的log函数只对正确的类别的概率进行处理,离0越近损失越大,离0越远损失越小,即可定义损失函数。对应log函数图像
将得分函数经过指数函数进行放大,再进行归一化,等于猫的概率越大越好(0-1)。
Li的log函数只对正确的类别的概率进行处理,离0越近损失越大,离0越远损失越小,即可定义损失函数。对应log函数图像
梯度下降
为了到达损失函数最小
沿着梯度的反方向,每次走的步长
3.批处理Bachsize
梯度下降时,传进来一大批图像取平均再确定更新方向
4.学习率要偏低,也可以在最开始学习率高一些,然后随着迭代次数增加,把学习率调低
Epoch=5万(训练总数)/100(bachsize)=500;执行500次迭代,每次迭代进行批处理100个数据神经网络由前向传播,反向传播,反向传播改变W。如下图由三个组成,输入层,隐藏层输出层。 输入是原始数据,hidden layer将三维输入转化为四维特征,用全连接操作,连接的每条线就是权重参数。
神经网络好的表达是因为他的非线性,神经网路经过每个隐藏层都要经过他的激活函数,即要经过一系列的激活函数。
反向传播能逐层求解,对中间层的层数对结果的影响可以用https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html 这个网址观察中间是隐层中改变神经网络个数,1个神经元权重参数3
1的矩阵,中间有2个神经元权重参数矩阵32中间有三个神经元权重参数矩阵式33,过拟合:神经网络为满足个别点,决策边界为了满足个别分割点而发生奇怪的分割
正则化:是惩罚参数,随着惩罚参数的变化越来越平滑3.激活函数:随着数增大sIGMOID函数接近于1,梯度约等于0,反向传播就就变成0不能更新
Relu函数:max(0,x)梯度传播直接传给大的数
4.数据预处理
对于原始数据:原始数据是杂乱无章的,用x-x的维度上的均值,用y-y维度上的均值得到的就是以0为中心化
此时,x方向上的差异比较小,Y方向上的差异比较大,利用relue函数的时候,会认为Y的比较重要,但一开始的时候这俩是一样重要的,所以需要进行归一化。5.权重初始化
权重初始化不能值一样不然会前向传播一样,反向传播也一样,参数朝着一个方向去更新
所以采用高斯初始化,以0为均值,指定一个小的标准差。6.Drop -out:防止神经网络过拟合
随机选择神经元的保留和删除,但比列是可以指定的,一般保留百分之50-60
Tensorflow中0.6是指保留百分之60的神经元。
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
3.简单神经网络搭建
NETWORK TOPOLOGIES
n_hidden_1 = 256
n_hidden_2 = 128
n_input = 784
n_classes = 10
指定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个单元格进行特征提取,一维,
为了得到更多特征需要多个filter
边缘填充:用0填充,使边缘和中间算的次数差不多
步长:每次移动多少个。特征结果不同
不能整除向下取整,stride是步长,pad外层加0
池化层:下采样减少原始输入的大小
最大池化:将特征图变化,指定大小后选取每个部分最大的数据放入新设定的特征
P4-6重点看、
Drop out =0.。。。保留率