20182304张子正 2020-2021-2 实验三
20182304张子正 2020-2021-2 Python综合实践
课程:《Python程序设计》
班级: 1823
姓名: 张子正
学号:20182304
实验教师:王志强
实验日期:2021年6月24日
必修/选修: 公选课
1.实验内容
- Python综合应用:我选择了神经网络和数据挖掘中相应算法
- 所谓神经网络的训练或者是学习,其主要目的在于通过学习算法得到神经网络解决指定问题所需的参数,这里的参数包括各层神经元之间的连接权重以及偏置等。因为作为算法的设计者(我们),我们通常是根据实际问题来构造出网络结构,参数的确定则需要神经网络通过训练样本和学习算法来迭代找到最优参数组。
- 说起神经网络的学习算法,不得不提其中最杰出、最成功的代表——误差逆传播(error BackPropagation,简称BP)算法。BP学习算法通常用在最为广泛使用的多层前馈神经网络中。
2.实验过程
backpropagation算法步骤
- BP算法的主要流程可以总结如下:
- 输入:训练集D=(xk,yk)mk=1D=(xk,yk)k=1m; 学习率;
- 过程:
- 在(0, 1)范围内随机初始化网络中所有连接权和阈值
- repeat:
- for all (xk,yk)∈D(xk,yk)∈D do
- 根据当前参数计算当前样本的输出;
- 计算输出层神经元的梯度项;
- 计算隐层神经元的梯度项;
- 更新连接权与阈值
- end for
- until 达到停止条件
- 输出:连接权与阈值确定的多层前馈神经网络
softmax函数
-
SoftMax顾名思义就是取max以一种soft的方式,与之对应的就是hardmax,hardmax最大的特点就是只选出其中一个最大的值,而Softmax的区别就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
softMax的结果相当于输入图像被分到每个标签的概率分布,该函数是单调增函数,即输入值越大,输出也就越大,输入属于该标签的概率就越大。
-
对softmax的结果计算交叉熵分类损失函数为:
-
上面已经说到softmax其实是一个概率,是正确类别对应输出节点的概率值,那么我们当然希望这个概率越大越好。
-
但是这个带有指数函数不好进行求导等运算,于是取log,log是单增函数,不改变单调性,再添上负号就变成了损失函数,将求最大值问题转换为求负的最小值问题,即max F()—->min -F()。我们希望的是损失函数越小越好,推出loss函数如下:
-
取log里面的值就是这组数据正确分类的Softmax值,损失函数越大,说明该分类器在真实标签上的分类概率越小,性能也就越差,反之,性能就越好。
2.实验过程
- 最后需要使用s.close()来断开连接。
- 加密解密方面,使用Base64,Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Python中使用比较简单方便。
实验结果
-
写一个文档
-
先启动服务器,后启动客户端,输入文档路径
-
客户机端发送成功
-
服务器端接受成功
上传码云
3. 实验过程中遇到的问题和解决过程
- 问题1:将套接字绑定到地址时,为什么ip地址是127.0.0.1?
- 问题1解决方案:127.0.0.1是本机的环回地址。127.0.0.1是用来检测网络的自己的IP,就是说任何一台电脑来说,不管是否连接到INTERNET上,127.0.0.1对于自己来说都是自己。
- 问题2:Base64编码中会自动加一个b前缀,打印后是这样的 b ‘xxx’,如何消除?
- 问题2解决方案:使用decode为Base64加解密后的数据解码即可after_base64.decode('utf-8')
4.其他(感悟、思考等)
- 实验总体不难,原因是我采用了比较简单的Base64加密算法,就是要注意一下算法解码。