网站建设功,.net做网站用什么框架,详情页页面页面,下载站推广写在前面#xff1a;俺这两天也是刚刚加入实验室#xff0c;因为之前的学习过程中用到更多的框架是tensorflow#xff0c;所以突然上手pytorch多少有些力不从心了。
这两个框架的主要区别在与tensorflow更偏向于工业使用#xff0c;所以里面的很多函数和类都已经封装得很完…写在前面俺这两天也是刚刚加入实验室因为之前的学习过程中用到更多的框架是tensorflow所以突然上手pytorch多少有些力不从心了。
这两个框架的主要区别在与tensorflow更偏向于工业使用所以里面的很多函数和类都已经封装得很完整了直接调用甚至连wb等尺寸都会自动调整。但是pytorch更加偏向于学术。。。。或者说更加偏向于数学很多功能都需要我们自己手动去实现 刚刚跟这d2l的课程学习了如何去实现最基本的神经网络和计算这里使用当时学过的solfmax作为经典案例作为一个简单的补充我会在这里面简单讲解一下softmax是怎么实现的以及一些库函数
纯手动实现
其实是有一些更高级别的api可以调用比如损失函数就不用我们自己手写但是训练的过程还是要的。
1.获取一些数据这里我们通过一个特殊数据集合来或去数据
#先凑成一个数据集合
batch_size 256
#这里好像就上面那么恶心了直接从这个数据集合中获取数据
train_iter, test_iter d2l.load_data_fashion_mnist(batch_size)
这里注意一个问题batch_size不是你获取到的全部数据而是你确定每一批数据的大小
接下来根据这个大小获取多批数据然后保存为训练集合以及测试集合
由于我们这里要的事情非常简单所以我们不验证 2.我们开始创建一层神经元输出为10个分量的估计数值
#初始化参数
num_inputs 784 #输入也就是特征值的数目为784
num_outputs 10 #输出也就是softmax层神经元的数目10#这段代码用于构建某一层的w和b并且先将其初始化
W torch.normal(0, 0.01, size(num_inputs, num_outputs), requires_gradTrue)
b torch.zeros (num_outputs, requires_gradTrue)
这里w和b是仅仅是一对数字而是一个完整的对象除了基本的数值以外还能存储一些注入诸如梯度等等信息。代表了这一层神经元的具体情况。
这个layer构建出来的神经元其实就是10个神经元每个神经元支持的输入为784个特征。 3.创建solftmax函数这个函数内部将会对神经网络的输出作出一些处理
#创建一个softmax函数用来完成最后的softmax操作
#X在这里应该是一个10个分量的tensor下面的函数就是正常的softmax操作
def softmax(X):X_exp torch.exp(X)partition X_exp.sum(1, keepdimTrue) #沿着列展开的方向求和return X_exp / partition #这里应用了广播机制
我们先进行指数化然后求和最后使用广播技术其实这个所谓的广播也算是线性代数计算时候的基本特征了得到一个归一化的tensor所有分量相加为1符合我们先是生活中对事物的预测逻辑比如连衣裙可能性0.55鞋子可能性0.25帽子可能性0.20 4.然后是定义最核心的预测函数称之为网络本身到也可以
#定义一个神经网络
#其实说是神经网络这里只是进行了一个简单的数据变换然后计算wxb
#最后计算出来的结果因为是matmul的矩阵乘法而且w和b本身也是size10 的 tensor
#所以计算结果也是一样大小的tensor然后就可以放心进行softmax操作
def net(X):return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) b)其实这个就是对于十个神经元然后进行计算操作得到估计数值
其实直接返回torch.matmul(X.reshape((-1, W.shape[0])), W) b的话就变化成一个很常见的10线性回归了在这里可以很清楚的看到softmax实现的是一个激活函数的作用 5.定义损失函数loss function def cross_entropy(y_hat, y):return - torch.log(y_hat[range(len(y_hat)), y])
这个东西稍微有一点点复杂。。。
首先先解释一下这个东西
y_hat[ range(len(y_hat)) , y
首先要先说明一点就是y_hat是预测数值一个二维tensor比如说其中的第一条数据
[0.22,0.23,0.35.........]这代表的是某一个物体的预测结果在10个标签中每一种可能性的概率
y则是一个一维tensor每个分量代表的是该物体到底是什么是确切数值
而这个[]中携带两个tensor的语法被称为“高级索引”
#补充一下这个语法的名字叫做高级索引是从二维矩阵中选择出一个一维tensor
#第一个tensor是选择哪些行这里选择所有行
#第二个是选择有哪些列
#在这个数据中我们实现的效果就是
#y-hat是一个二维tensor每行是一个数据每一列是对不同类型的预测
#y。。。严格来说是一个一维tensor每个分量代表第i个数据到底是什么标签
#也就是说这个的逻辑意义是每条数据猜对的概率差不多可以这样子理解 6.优化/迭代函数
其实这个部分就是我们迭代gradient descent 时候的操作
所谓的梯度就是求得的偏导数
#优化函数其实这玩意就是我们的迭代函数就那个repeat部分的东西,0.1是learning rate
def updater(batch_size):return d2l.sgd([W, b], 0.1, batch_size)sgd就是d2l包下内置的“随机 gd”函数,这个里面梯度已经保存起来了 7.创建单次训练函数
#把模型训练了
def train_epoch_ch3(net, train_iter, loss, updater): #save# 将模型设置为训练模式if isinstance(net, torch.nn.Module):net.train()for X, y in train_iter:# loss是已经封装好的损失计算函数l loss(net(X), y)# 使用定制的优化器和损失函数l.sum().backward() #计算梯度也就是代价函数导的东西updater(X.shape[0]) #梯度在这里好像是没有传入进来但是实际上已经保存在w和b中了对所有的w和b进行迭代计算
这个函数执行一次也就是一次训练 8.训练10次
#训练函数def train_ch3(net, train_iter, test_iter, loss, num_epochs, updater): #save训练模型定义见第3章for epoch in range(num_epochs):train_epoch_ch3(net, train_iter, loss, updater) # 直接就是训练了不验证了#开始训练
num_epochs 10
train_ch3(net, train_iter, test_iter, cross_entropy, num_epochs, updater)
这里我们直接根据训练集合进行验证 9.最后进行预测以及可视化展示
#预测函数
def predict_ch3(net, test_iter, n6): #save预测标签定义见第3章for X, y in test_iter:break# 将真实标签转换为对应的类别名称trues d2l.get_fashion_mnist_labels(y)# 使用net进行预测并且寻找预测结果转化为名称preds d2l.get_fashion_mnist_labels(net(X).argmax(axis1))#转化为title还是使用对列生成器语法titles [ true \n pred for true, pred in zip(trues, preds) ]#展示图片d2l.show_images( X[0:n].reshape((n, 28, 28)), 1, n, titlestitles[0:n])#展示预测
predict_ch3(net, test_iter)plt.show()关于在训练和预测的时候我们需要干什么
其实前面也算是写了不少代码了其实也就是单纯实现了一个单一神经元以及softmax的预测
这里就简单总结一下在这个“训练”部分我们一般都会做一些什么事情
我们先拿出一个很简单的单一线性回归预测来举个例子
for X, y in data_iter:l loss(net(X) ,y) #计算这个一批数据10个的损失trainer.zero_grad() #清除已经有的梯度l.backward() # 计算损失对当前模型的梯度trainer.step() #根据梯度更新模型参数梯度下降的根本操作
其实看这个代码我们第一步做的就是遍历通过一开始设置的数据批次进行分批次的训练
进入某一次训练中的时候我们要先根据损失函数计算出这一批的损失
不同的框架和代码对这个玩应的实现和理解都完全不一样但是你要记住这个东西的数学本质是损失函数之和即为这个批次数据的代价函数我们最后梯度下降的公式最重要的一个步骤就是对代价函数求偏倒数这也就是框架中常说的gradient梯度
然后根据损失通过一种称之为“反向传递”的技术计算出偏导
最后这个step就代表开始训练了
大致架构就是这个样子实现的如果这个样子还不是太明白具体要做什么那么我们直接把上面是用softmax技术的东西简化一下再放出来
#把模型训练了for X, y in train_iter:l loss(net(X), y) #loss是已经封装好的损失计算函数l.sum().backward() #计算梯度也就是代价函数导的东西updater(X.shape[0]) #梯度在这里好像是没有传入进来但是实际上已经保存在w和b中了
也是进行分批次的训练
然后计算一下损失再计算代价函数对代价函数是用反向传播求偏导数
最后进行训练
最终总结一下像这样子手动实现一个训练的过程中我们能做的就是
1想办法得到代价函数也许还要清除之前计算得到的梯度
2获取代价函数的梯度一般是反向传递
3训练
至于在预测的时候做什么就是一些预测结果的分析精度计算什么的那都是后话了 文章转载自: http://www.morning.rdkt.cn.gov.cn.rdkt.cn http://www.morning.tbhf.cn.gov.cn.tbhf.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.bhxzx.cn.gov.cn.bhxzx.cn http://www.morning.rhjsx.cn.gov.cn.rhjsx.cn http://www.morning.znrlg.cn.gov.cn.znrlg.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.xlmgq.cn.gov.cn.xlmgq.cn http://www.morning.ltksw.cn.gov.cn.ltksw.cn http://www.morning.drgmr.cn.gov.cn.drgmr.cn http://www.morning.hptbp.cn.gov.cn.hptbp.cn http://www.morning.ngpdk.cn.gov.cn.ngpdk.cn http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn http://www.morning.crkmm.cn.gov.cn.crkmm.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.rtmqy.cn.gov.cn.rtmqy.cn http://www.morning.tztgq.cn.gov.cn.tztgq.cn http://www.morning.bydpr.cn.gov.cn.bydpr.cn http://www.morning.bpyps.cn.gov.cn.bpyps.cn http://www.morning.dkbsq.cn.gov.cn.dkbsq.cn http://www.morning.wptrm.cn.gov.cn.wptrm.cn http://www.morning.crrmg.cn.gov.cn.crrmg.cn http://www.morning.kxgn.cn.gov.cn.kxgn.cn http://www.morning.dgknl.cn.gov.cn.dgknl.cn http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.qnypp.cn.gov.cn.qnypp.cn http://www.morning.rbkgp.cn.gov.cn.rbkgp.cn http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn http://www.morning.rkyw.cn.gov.cn.rkyw.cn http://www.morning.ltpmy.cn.gov.cn.ltpmy.cn http://www.morning.sxlrg.cn.gov.cn.sxlrg.cn http://www.morning.zrwlz.cn.gov.cn.zrwlz.cn http://www.morning.zyndj.cn.gov.cn.zyndj.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn http://www.morning.xkzr.cn.gov.cn.xkzr.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.qcdtzk.cn.gov.cn.qcdtzk.cn http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn http://www.morning.jyznn.cn.gov.cn.jyznn.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.wjxyg.cn.gov.cn.wjxyg.cn http://www.morning.ggqcg.cn.gov.cn.ggqcg.cn http://www.morning.bssjz.cn.gov.cn.bssjz.cn http://www.morning.dzqr.cn.gov.cn.dzqr.cn http://www.morning.rlbc.cn.gov.cn.rlbc.cn http://www.morning.qxxj.cn.gov.cn.qxxj.cn http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn http://www.morning.gwtgt.cn.gov.cn.gwtgt.cn http://www.morning.zfzgp.cn.gov.cn.zfzgp.cn http://www.morning.jhzct.cn.gov.cn.jhzct.cn http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn http://www.morning.fglxh.cn.gov.cn.fglxh.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.jmspy.cn.gov.cn.jmspy.cn http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn http://www.morning.cwskn.cn.gov.cn.cwskn.cn http://www.morning.bmsqq.cn.gov.cn.bmsqq.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.npxcc.cn.gov.cn.npxcc.cn