2022/10/23周报

目录

摘要

一、文献阅读

1、题目

2、方法差异

3、神经网络结构

4、混凝土骨料的分类

5、实验过程

6、实验结论

二、工程项目

1、内置对象

2、Request和Response

3、Session和Cookie

4、Application 和 Server

三、深度学习

1、多层次感知机的实现

2、通过API实现简单感知机

3、对于卷积神经网络几个问题的回答

总结


摘要

针对上周CNN方面学习不足的问题下,本周继续学习CNN相关知识。在文献阅读方面,本周我分析了一篇基于卷积神经网络的砂石骨料分类方法的论文,比对了传统的VGG16模型和卷积模型(CNN13)的效果,在分类问题上显然CNN13模型更占优。对于工程项目方面,对ASP.NETMVC的几个内置对象展开了学习 。在深度学习方面,实现感知机在代码上的简单复现,通过实践更好的掌握知识,最后回答了关于CNN的一些问题。在本周的学习中,论文选的不好,此论文没有很好的表明数学过程,下周的论文学习应该注重这方面,在工程项目上继续加深学习。在深度学习方面,在理论学习的同时,对于代码的实践能力也不能落下。

In view of the lack of CNN learning last week, I continue to learn related knowledge of CNN this week.In terms of literature reading,this week, I analyzed a paper on the classification method of sand and gravel aggregate based on convolutional neural network.To compare the effects of traditional VGG16 model and convolutional model (CNN13) ,obviously, CNN13 model is dominant in classification. For the aspect of project, I learned several built-in objects of ASP.NETMVC.In terms of deep learning, I simply reproduce the code about the perceptron , master the knowledge through practice better, and finally answer some questions about CNN.In this week,I do not find a proper paper, and the paper do not show the mathematical process well. In next week's paper study, i will pay attention to this aspect and continue to deepen my study in engineering projects. In terms of deep learning, not only theoretical learning, but also should not leave the practical ability of code behind.

一、文献阅读

1、题目

基于卷积神经网络的砂石骨料分类方法研究

doi:10.3788/LOP202158.2010015

2、方法差异

传统的数字图像处理技术对于光照环境具有很强的敏感性,在实际生产中,混凝土的形成环境较为复杂,光照不稳定,即并不能很好的投入生成实践中,常常用在实验中。

卷积神经网络具有权值共享和局部视野的特点 ,具有很强的鲁棒性,广泛运用于图像识别中。

3、神经网络结构

卷积层:对于输入图像数据,卷积运算是指滤波器按一定的步幅滑动进行计算,即滤波器中的各个元素与相对应的输入图像数据中的各个元素(像素值)相乘,然后求和并将结果输出到对应位置。

池化层:池化计算即是在滤波器中选择最大值或者平均值作为输出值。池化对输入图像数据的偏差具有很高的鲁棒性,当输入图像数据发生微小偏差时,池化仍会返回与没有发生偏差的结果相同。

激活函数一般选取Relu函数,当输入值大于0时,输出就是该输入值,当小于0时,输出就是0。

扁平化层:位于卷积层和全连接层之间,用于将多维数据一维化,传入全连接层。

输出层:采用Softmax函数来解决分类问题,将多次迭代后的结果映射到(0,1)区间,转换成概率的结果,因此整个Softmax层的相加结果为1。

文章所采用的神经网络结构为10个卷积层、6个池化层、3个全连接层组成。

输入图像是经过预处理的单通道灰度图(分辨率为384pixel×275pixel)。卷积层使用3×3的滤波器,步长为1,边界填充的像素值为0。池化层采用最大池化法进行处理,使用2×2的滤波器,步长为2,边界填充的像素值为0。全连接层使用1024个参数。

2022/10/23周报_第1张图片

 此神经网络结构采用反向传播的方式对权重参数进行更新,每个网络层使用Relu函数,使用神经元随机删除的方法随机删除全连接层的参数以防止网络过拟合,使用自适应矩估计优化器对整个网络进行优化,由Softmax函数输出分类结果。

4、混凝土骨料的分类

合格砂石骨料的粒径分布在10-25mm,骨料的粒形以整形为主。分为5个等级:

2022/10/23周报_第2张图片

对于数据的处理:每个等级采用1000幅数字图案,并800作为训练集,200作为测试集。对采集到的数字图像采用双线性插值的方法进行预处理,将原始图像的宽和高压缩至原图像的10%。在处理后数据图像大小由10MB变为0.1MB,宽度由3840pixel变为384pixel,高度由2748pixel变为275pixel。

效果:在进行双线性插值运算后,即保留了原始数字图像上的特征,减低了内存要求,卷积的运算速度也能大幅度提高,对于计算机显存的要求也降低了。

5、实验过程

训练步幅设为10000,全部图像参与65轮训练;每25步保存一次损失函数值、准确率和步幅。CNN13(此文章模型)和VGG16模型的损失函数对比曲线,CNN13下降梯度比较大。

在实验中,CNN13模型中收敛速度快且波动小,在训练4000步即数 据集迭代26轮后,损失函数值收敛至0。而VGG16模型收敛速度较慢且波动范围较大,在训练6000步即数据集迭代39轮后,损失函数值才逐渐收敛至0。

2022/10/23周报_第3张图片 

准确率对比,CNN13较VGG16相比,在训练过程中呈现的是小范围的波动,且模型收敛后即使有着小范围的波动,准确率也在0.9以上,VGG16模型收敛所用时间长,而且在后期呈现大范围波动。

2022/10/23周报_第4张图片

在内存消耗上,相比于 VGG16模型,CNN13模型使用的网络层数更少,参数总量仅有三千万左右,比 VGG16模型少了一亿,只有VGG16模型的23%,参数占用的内存消耗也逐渐减少,在所需时间上也是CNN13占优。

两个模型的内存消耗表如下所示。

 

CNN13模型和 VGG16模型的准确率:

2022/10/23周报_第5张图片

由表格来看,CNN13模型在1、2、5这几个等级的砂石骨料预测准确率为100%,在3、4也就只有一副图预测错误,效果明显好于VGG13模型。

6、实验结论

相比于 VGG16模型,CNN13模型的网络层数更少,参数量更少,GPU内存消耗更少,训练时间更短。在训练过程中,CNN13模型的损失函数曲线的收敛速度比 VGG16模型更快,波动范围更小,收敛之后更加稳定,不会出现较大范围的波动,准确率曲线同样也收敛更快,波动范围更小,收敛之后没有出现较大范围的波动。模型测试结果表明,CNN13模型的分类效果更好,准确率更高。

二、工程项目

1、内置对象

在ASP.NET MVC框架中,有6个重要的内置对象:

Request(请求) Response (响应 ) Session (会话)

Cookie(客户端数据) Application (当前网站对象) Server( 服务器对象)

2、Request和Response

Request是服务器接收客户端数据的 。

Request.QueryString:get请求。

 return Content($"{Request.QueryString["name"]}-{Request.QueryString["age"]}-{Request.QueryString["id"]}");

Request.Form:post请求

return Content(Request.Form["loginname"]);

上传文件

Request.Files:post请求的文件。

  public ActionResult FileData() 
        {
            //Request.MapPath将虚拟路径转化为物理路径
            Request.Files["file"].SaveAs(Request.MapPath("~/uploads/" + Request.Files["flie"].FileName)) ;
            return Content("ok");
        }

前端代码

 
                   

Response :服务器给客户端信息

Response.Write:向客户端输出内容

Response.Redirect:重定向,重新请求另外一个路径。

public ActionResult RequestHeader()
        {
            Response.Headers["hello"] = "world";
            return Content(Request.Headers["token"]);
        }

3、Session和Cookie

Session会话,数据保存在服务器中,储存少量重要数据比如账号,每个人独立

Session是一个键值对,存活时间20min,

Session销毁 Abandon或者Clear

 public ActionResult SessionData()
        {
            Session["user"] = Request.Form["user"];
            return Content("会话中的数据中的数据是:"+Session["user"]);
        }
//消除Session
public ActionResult CleanSession()
        {
            Session.Abandon();
            return Content("会话中的数据中的数据是:" + Session["user"]);
​
        }

Cookie具有时效性

public ActionResult CookieSave()
        {
            Response.Cookies.Add(new HttpCookie("token")
            {
                Value = "123456abc",
                Expires = DateTime.Now.AddDays(7)              
            });
            return Content("ok");       
        }
//货期Cookies的值
public ActionResult CookieGet() 
        {
            return Content(Request.Cookies["token"].Value);        
        }
//清除Cookie的信息,即把时效性设为-1即可,使用过期的方式。
 public ActionResult CookieClear()
        {
            Response.Cookies.Add(new HttpCookie("token")
            {
                Value = "123456abc",
                Expires = DateTime.Now.AddDays(-1)
            });
            return Content("ok");
​
        }

4、Application 和 Server

Application和Session的独有不同,Application是大家都能看到。

  public ActionResult ApplicationData()
        {
            HttpContext.Application["user"] = "123";
            return Content("");
        }
        public ActionResult ApplicationGet()
        {
            return Content(HttpContext.Application["user"].ToString());
​
        }

Server.Transfer 转发

Server.MapPath:虚拟路径转为物理路径。

Server.HtmlEncode、Server.HtmlDecode、Server.UrlEncode、Server.UrlDecode

  public ActionResult ServerDemo()
        {
            //路径不变,内容发生变化
            Server.Transfer("/WebForm1.aspx");
            return Content("");       
        }
​
        public ActionResult ShowDemo()
        {
            return Content("这是内容");
        }

三、深度学习

1、多层次感知机的实现

Fashion-MNIST中的每个图像由 28×28=784个灰度像素值组成。 所有图像共分为10个类别。 忽略像素之间的空间结构, 将每个图像视为具有784个输入特征 和10个类的简单分类数据集。

用几个张量来表示我们的参数,每一层都要记录一个权重矩阵和一个偏置向量,为损失关于这些参数的梯度分配内存。采用Relu激活函数和交叉熵损失函数。

import tensorflow as tf
from d2l import tensorflow as d2l
​
​
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
​
num_inputs, num_outputs, num_hiddens = 784, 10,256
​
W1 = tf.Variable(tf.random.normal(
    shape=(num_inputs, num_hiddens),mean=0, stddev=0.01
))
b1 = tf.Variable(tf.zeros(num_hiddens))
W2 = tf.Variable(tf.random.normal(
    shape=(num_hiddens,num_outputs), mean=0, stddev=0.01
))
b2 = tf.Variable(tf.zeros(num_outputs))
​
params = [W1, b1, W2, b2]
​
def relu(X):
    return tf.math.maximum(X,0)
​
#使用reshape将每个二维图像转换为一个长度为num_inputs的向量
def net(X):
    X = tf.reshape(X, (-1, num_inputs))
    H =relu(tf.matmul(X,W1)+b1)
    return tf.matmul(H,W2)+b2
​
def loss(y_hat,y):
    return tf.losses.sparse_categorical_crossentropy(y,y_hat, from_logits=True)
​
​
num_epochs, lr = 10, 0.1
updater = d2l.Updater([W1, b1, W2, b2],lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)
​
d2l.predict_ch3(net, test_iter)

2、通过API实现简单感知机

import tensorflow as tf
from d2l import tensorflow as d2l
​
net = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(256, activation='relu'),
    tf.keras.layers.Dense(10)
])
​
batch_size ,lr, num_epochs = 256, 0.1, 10
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
trainer = tf.keras.optimizers.SGD(learning_rate=lr)
​
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

3、对于卷积神经网络几个问题的回答

1、卷积了以后会得到啥,这个得到的东西能不能解释;

神经网络用卷积核在图片上滑动,对每个像素点进行计算,提取图片特征。

2022/10/23周报_第6张图片

 

2、池化的作用是啥,可以替换没有

在图像卷积中用于压缩图片的,减小下过拟合,采用最大池化,保留更多的纹理信息,减低特征维度。

最大池化在提取图片信息效果较好,而平均池化在提取图片背景上效率更高。

不可替换,全卷积层,参数太多,池化后数据结构不会发生改变,即数据的输入输出通过不会改变。

3、池化卷积池化卷积的叠加到底会有什么效果;

卷积获取图像特征,池化进行特征选择。

在二者叠加后,提取所需图片特征,位全连接层提供输入。

4、flattening宽度多少合适;

扁平化层用于将多维数据转化为一维数据,供全连接层进行下一步降低向量大小和实现分类效果。

在此神经网络中,输入图片大小为28✖28,卷积核大小为5✖5,池化窗口为2✖2,在经过第一层卷积层的输出大小变为28-5+1(在卷积层进行补0操作)=24,在经过第一层池化层后大小变为24/2=12,同理在第二层卷积层后大小变为12-5+1=8,在第二层池化层后变为8/2=4,之后在扁平化层进行拉长4✖4✖16=256,之后在全连接层降低大小,最后变为10。此次训练的MNIST数据集即为从0到9的数据,因此最后的分类种类应该为10种。

2022/10/23周报_第7张图片

5、全连接能否drop;

在CNN识别图片中不能抛弃,全连接层是将卷积扁平化后的一维向量逐渐降低大小,通过多个全连接层,输出的特征向量大小一步步减小。

而在语义识别中,例如输入的向量是300大小,输出向量也应该为300大小,因此在特定情况下可以丢弃。

6、最终分类多少与前面各层有没有对应关系。

最后一层全连接层的神经元个数即为分类的种类数。

在卷积神经网络中单层参数的数量应该大于最后分类数。

总结

本周再次学习了CNN,对于CNN的整个网络结构,和运行过程有了一个更加清晰的了解,但数学过程依然需要加强学习,在下周的论文选取上应该注重于数学过程,对于实践部分,该多上机练习,理论成果应该转为为实际的东西,才能发挥出它的效果。

你可能感兴趣的:(深度学习,python)