TensorFlow实战-从梯度下降到Mnist数据集的CNN训练

本文介绍了从基于梯度下降的线性回归开始,逐步深入到Mnist数据集的逻辑回归、神经网络和卷积神经网络(CNN)训练。通过TensorFlow实现,探讨了不同模型在Mnist手写数字识别中的应用和优化。
摘要由CSDN通过智能技术生成

本文的基本结构:

1. 基于梯度下降的线性回归

2. Mnist数据集的逻辑回归

3. Mnist数据集的神经网络

4. Mnist数据集的卷积神经网络

5. 总结


1. 基于梯度下降的线性回归

1.1 任务:给定一组数,X与Y,采用线性函数去拟合和预测

1.2 问题建模

    线性实现最优拟合,自然想到通过最小化误差的最优化数学模型,假定最优化线性函数为y=ax+b,最优化问题求解:

    这是一个凸优化问题,可以利用导数求解和梯度下降两种方法:

    1)导数求解

      求得闭环解

    2)梯度下降迭代求解

    a b step给一个初始值

    For 迭代次数

         

1.3 求解实现Matlab

%样本
%Sample = rand(2,10);
%Sample = [1400 1600 1700 1875 1100 1550 2350 2450 1425 1700;245000 312000 279000 308000 199000 219000 405000 324000 319000 255000]./1000;

x = [108.0 , 19.0 , 13.0 , 124.0 , 40.0 , 57.0 , 23.0 , 14.0 , 45.0 , 10.0 , 5.0 , 48.0 , 11.0 , 23.0 , 7.0 , 2.0 , 24.0 , 6.0 , 3.0 , 23.0 , 6.0 , 9.0 , 9.0 , 3.0 , 29.0 , 7.0 , 4.0 , 20.0 , 7.0 , 4.0 , 0.0 , 25.0 , 6.0 , 5.0 , 22.0 , 11.0 , 61.0 , 12.0 , 4.0 , 16.0 , 13.0 , 60.0 , 41.0 , 37.0 , 55.0 , 41.0 , 11.0 , 27.0 , 8.0 , 3.0 , 17.0 , 13.0 , 13.0 , 15.0 , 8.0 , 29.0 , 30.0 , 24.0 , 9.0 , 31.0 , 14.0 , 53.0 , 26.0 ];
y = [392.5 , 46.2 , 15.7 , 422.2 , 119.4 , 170.9 , 56.9 , 77.5 , 214.0 , 65.3 , 20.9 , 248.1 , 23.5 , 39.6 , 48.8 , 6.6 , 134.9 , 50.9 , 4.4 , 113.0 , 14.8 , 48.7 , 52.1 , 13.2 , 103.9 , 77.5 , 11.8 , 98.1 , 27.9 , 38.1 , 0.0 , 69.2 , 14.6 , 40.3 , 161.5 , 57.2 , 217.6 , 58.1 , 12.6 , 59.6 , 89.9 , 202.4 , 181.3 , 152.8 , 162.8 , 73.4 , 21.3 , 92.6 , 76.1 , 39.9 , 142.1 , 93.0 , 31.9 , 32.1 , 55.6 , 133.3 , 194.5 , 137.9 , 87.4 , 209.8 , 95.5 , 244.6 , 187.5];
Len = length(x);

%变量初始化Para为a b迭代数组,delta De为迭代过程中的误差,f为目标函数值
Para = [0 0];
delta = 2;
De = [];
f = 0;
step = 0.0000001;
%梯度下降迭代
while  delta>0.001
    De = [De delta];
    dao1 = sum((Para(1)*x+Para(2)-y).*x);
    dao2 = sum((Para(1)*x+Para(2)-y));
    Para(1) = Para(1) - step*dao1;
    Para(2) = Para(2) - step*dao2;
    delta = abs(sum((Para(1).*x+ Para(2)-y).^2)/2 - f);
    f = sum((Para(1).*x+ Para(2)-y).^2)/2;
end
z = Para(1)*x + Para(2);
Para

%闭环解
a = (Len*sum(x.*y)-sum(x)*sum(y))/(Len*sum(x.^2)-sum(x)^2)
b = (sum(y)-a*sum(x))/Len

figure(1)
plot(x,y,'bo',x,a*x+b,'-',x,z,'*');
legend('样点','闭环解','梯度下降解');
figure(2);
plot(1:10,De(1:10));
legend('迭代收敛误差');

梯度解:Para =3.4206   19.6806

闭环解:a =3.4138   b =19.9945

从结果看,闭环解和梯度下降解一致,误差收敛速度10次基本已收敛。


1.3 梯度求解技巧

    在梯度下降的求解过程中,发现a b的初始值,训练步长对于收敛产生重要影响。

    1) a b初始值影响

    a b的初始值对于收敛速率有一定影响,如果初值设为1000 1000,收敛结果如下,但是不至于不能收敛。


    2) 调整步长的影响

    调整步长设置不合适,有可能会错过最优点,造

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值