百度paddlepaddle - 深度学习7日
AL亚森罗宾 发布于2020-04 浏览:1438 回复:1
0
收藏

百度paddlepaddle - 深度学习7日入门-CV疫情特辑:

1.day01 新冠疫情可视化

​ ​​

2.day02 手势识别

class MyDNN(fluid.dygraph.Layer):
	def __init__(self):
		super(MyDNN, self).__init__()
		self.hidden1 = Linear(100, 100, act="relu")
		self.hidden2 = Linear(100, 100, act="relu")
		self.hidden3 = Linear(100, 100, act="relu")
		self.hidden4 = Linear(100, 100, act="relu")
		self.out = Linear(3*100*100, 10, act='softmax')

	def forward(self, input):
		x = self.hidden1(input)
		# print("hidden1", x.shape)
		x = self.hidden2(x)
		# print("hidden2", x.shape)
		x = self.hidden3(x)
		# print("hidden3", x.shape)
		x = self.hidden4(x)
		x = fluid.layers.dropout(x, dropout_prob=0.4)
		x = fluid.layers.reshape(x, shape=[-1, 3*100*100])
		y = self.out(x)
		return y

3.day03 车牌识别

#定义网络
class MyLeNet(fluid.dygraph.Layer):
    def __init__(self):
        super(MyLeNet,self).__init__()
        self.hidden1_1 = Conv2D(1, 28 , 5 , 1)
        self.hidden1_2 = Pool2D(pool_size=2, pool_type='max', pool_stride=1)
        self.hidden2_1 = Conv2D(28, 32, 3, 1)
        self.hidden2_2 = Pool2D(pool_size=2, pool_type='max', pool_stride=1)
        self.hidden3 = Conv2D(32, 32, 3, 1)
        self.hidden4 = Linear(32*10*10, 65, act='softmax')
    def forward(self,input):
        x = self.hidden1_1(input)
        x = self.hidden1_2(x)
        x = self.hidden2_1(x)
        x = self.hidden2_2(x)
        x = self.hidden3(x)
        x = fluid.layers.dropout(x, dropout_prob=0.1)
        x = fluid.layers.reshape(x, shape=[-1, 32*10*10])
        y = self.hidden4(x)
        return y

4.day04 口罩分类

class VGGNet(fluid.dygraph.Layer):
	'''
	VGG网络
	'''

	def __init__(self):
		super(VGGNet, self).__init__()
		# 224 + 2 - 3 / 1 + 1
		# 224 + 2 - 2  / 2 + 1
		self.convpool01 = ConvPool(3, 64, 3, 2, 2, 2, act="relu")
		self.convpool02 = ConvPool(64, 128, 3, 2, 2, 2, act="relu")
		self.convpool03 = ConvPool(128, 256, 3, 2, 2, 3, act="relu")
		self.convpool04 = ConvPool(256, 512, 3, 2, 2, 3, act="relu")
		self.convpool05 = ConvPool(512, 512, 3, 2, 2, 3, act="relu")

		self.pool_5_shape = 512 * 7 * 7
		self.fc01 = fluid.dygraph.Linear(self.pool_5_shape, 4096, act="relu")
		self.fc02 = fluid.dygraph.Linear(4096, 4096, act="relu")
		self.fc03 = fluid.dygraph.Linear(4096, 2, act="softmax")

	def forward(self, inputs, label=None):
		"""前向计算"""
		out = self.convpool01(inputs)
		# print(out.shape)
		out = self.convpool02(out)
		out = self.convpool03(out)
		out = self.convpool04(out)
		out = self.convpool05(out)

		out = fluid.layers.reshape(out, shape=[-1, 512 * 7 * 7])
		out = self.fc01(out)
		out = self.fc02(out)
		out = self.fc03(out)

		if label is not None:
			acc = fluid.layers.accuracy(input=out, label=label)
			return out, acc
		else:
			return out

唯一一个做到100%(因为测试集比较小+运气好)

5.day05 人流密度检测

6.day06 PaddleSlim模型压缩

几天的学习,以前在学校的时候间断的学习,到工作后,没机会接触相关内容的我来说,是一个很好的机会,现在回想起咋学校的时候,当时自己一个人在MOOC上埋头学习机器学习和深度学习的相关算法,(当时在学校的时候,身边也是没有一起在这方面学习的伙伴),但是这次的飞桨的课程, 有很多人,大家都非常积极的探讨着问题,我们经常调参调到深夜到快黎明,(虽然自己调参的效果比不上运气,调参真的很看运气)这次的课程也算是让我之前从没有接触过深度学习实践,只接在学校的时候接触过一些算法理论,以及工作的时候,看看API(但是工作中没有使用的机会,所以基本学完就忘了),但是这次是真正的把模型跑起来了, 参数调起来了。

        从过程来看,深度学习基本包括几个过程,数据的收集和预处理。

        1.数据的收集和预处理

           这次我们的数据集都是已经提供好的了,但是在实际工作中, 我们数据集都还是要慢慢去收集、积累、标注的。

           在跑模型之前需要把数据进行预处理,一般讲要分出训练集和测试集。

        2.搭建模型

           从手势识别的DNN,到车帕识别CNN

        3.训练模型

           设置epochs和batch_size,学习率、优化函数等来进行模型的训练(经常出现过拟合,然后设置dropout的时候,有时候发现还没有自己跑出来的好。这点感觉有点坑。(或许是用的不好))

           这个过程有点漫长,最好使用GPU来跑, 所以在本地建议还是把GPU的环境搭建起来,因为AIStudio上的GPU很难抢到的,但是有时候会发现自己本地的GPU内存会不够,我在跑day5 人流密度检测的时候,内存就不够了, (显卡RTX2060),但是GPU真的比CPU快很多。AIStudio也会有一些免费的算力卡可以使用。说起AIStudio(老是一直转圈圈,GPU难抢,data里面的数据集有时候总是没了,吐个槽)

         4.测试训练集

            会输出一个acc,acc越高,心里越兴奋。

         5.模型调用

            暂时还没有 demo,可以让我通过输入一张图片,获取结果的。如果可以像自己写的utils一样可以直接调用多好。

 

 需要代码的可以查看  github: https://github.com/ArseneLupinhb

 

 

 

 

 

 

 

 

 

收藏
点赞
0
个赞
共1条回复 最后由kn怪盗基德回复于2020-12
#2kn怪盗基德回复于2020-12

精细!

0
TOP
切换版块