历时将近一个半月的百度AI达人养成营要结束了,这一个多月以来确实是一直在进步。我是从这个暑假才接触了AI,计算机视觉方向的知识,从最开始跑Github上的yolo模型,做数据集训练,到学习python语言,接触神经网络,学会如何看懂代码中的网络,可以说是很大的一个成长。在这里记录一下我的学习心得与成长历程吧,未来还有很多的路要走。具体的笔记大家也可以看我的博客——努力学习DePeng的博客_CSDN博客-笔记领域博主
一、知识总结
- 课节1-7 Python基础
Part1 字符串操作
一些操作只是改变了显示,记得赋值操作
- str1+str2 #字符串进行拼接
- str*n #字符串重复显示n次
- len #字符串长度
- 字符串.spilt() #根据括号内间隔符对字符串切分
- 字符串1.join(字符串2) #字符串1与2的合并
- 字符串.replace('str1','str2') #把字符串中str1换为str2
- 字符串.upper() #把字符串内容改为大写
- 字符串.lower() #把字符串内容改为小写
- 字符串.strip() #删掉字符串首尾空白
- 字符串.lstrip() #删掉字符串左边空白
- 字符串.rstrip() #删掉字符串右边空白
- '{} {} {}'.format('str1','str2','str3') #将str参数传递,可在{}内标号确定传递位置,也可指定参数传递
- 字符串 = '%s %f %d' % {str,float,int} #参数传递
Part2 Python索引
python索引是从0开始的;
可通过负数进行从后往前索引(从-1开始);
也可通过[n:n+a]进行切片操作(左闭右开的区间),[n:]代表从n开始右边全取,[:n]代表从左边开始取到n,[::n]代表每隔n个字符取一次
Part3 Python List结构(列表结构)
通过[]创建list结构,里面可以放任何类型且无长度限制
len(list([])) #可以打印list长度
list可加法操作拼接,可乘法操作重复复制
list结构也可以像python索引并进行替换赋值操作
del list[n:n+a] 可以进行删除操作
list.count[‘a’] 对list中的a进行计数
list.index[‘a’] 对a在list中的位置进行索引
list.append(’’) 对list中添加东西,一次只能添加一个元素
list.insert(n,’’) 在list的n位置插入元素
list.remove(’’) 在list中删除元素
list.pop(n) 弹出n元素并进行显示和在list中删除操作
list.sort() 对list元素进行排序,list改变list1 = sorted(list) 对list进行排序,list不改变,list1为排序后输出#默认为从小到大排序,可通过**(reverse = True)**进行从大到小排序
list.reverse() 对list中元素进行颠倒顺序
list = range(start, stop, step)
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0,5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0,1,2,3,4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
Part4 Python字典
dict = {} 定义字典 key—value,一个键对应一个值 key一般用字符串,value什么类型值都可以
dict[‘a’] = 123 在字典dict中赋值,键值a对应值123 如:dict = {‘a’:123}字典索引只能拿键值key去索引,不能用index索引
dict.get(‘a’) = dict[‘a’]
dict.pop(‘a’) 弹出当前key值’a’
del dict[‘a’] 删除key值’a’
dict1.update(dict2) 用dict2中的key值更新dict1
dict.keys() 打印所有的key值
dict.values() 打印所有的value值
dict.items() 打印所有key与其对应的value值
Part5 Python集合
list = set(list) 集合保留下列表中唯一的元素,去除重复字符
{} 写key—value对是字典,不写是集合
set1.union(set2) or set1 | set2 求集合1与集合2的并集
set1.intersection(set2) or set1 & set2 求集合1与集合2的交集
set1.difference(set2) or set1 - set2 求集合1关于集合2的差异
set2.issubset(set1) or set2 =set1 判断集合2是否是集合1的子集,输出为bool值
set.add() 在集合中添加元素
set.update() 在集合中更新元素
set.remove() 在集合中删除元素
set.pop() 在集合中弹出元素,从左边开始弹出
Part6 赋值机制
a is b :a与b的id相同 id——内存指向
a = b : a与b的值相同为了提高内存的利用效率,对于值比较小的数字采用重用方式,id相同;对于数值比较大的数字指向不同内存,id不同
..............还有判断结构,循环结构,函数,包,类,文件操作,异常处理机制等等 Python 冒泡排序,快速排序,插入排序和希尔排序算法部分大家可以查找菜鸟教程,里面有很多很基础的Python代码示例
- 课节8-12 图像处理与神经网络模型基础
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
主要是用了这三个库,大家还可以学习一下opencv的库 import cv2,会有更方便的操作
二、炼丹心得
具体的网络模型我就在这里不介绍了,在这里给大家介绍一下炼丹的超参数吧
batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
iteration:1个iteration等于使用batchsize个样本训练一次;
epoch:1个epoch等于使用训练集中的全部样本训练一次;
举个例子,我现在训练集有1840个样本,设置batchsize=8,iteration=4000那么:等我训练到第230个iteration时,就是一个epoch,一共有17个epoch当然也可以直接设置epoch个数而不是迭代轮数,batchsize的大小应该根据你的显卡的能力来调整,在这里很感谢百度飞桨平台给的每天8小时至尊GPUV100算力,抱拳!
还有学习率,优化器的定义等等许多
其实我们可以把神经网络的搭建与训练到测试分为以下几个步骤:
- 制造数据集Dataset,将数据集的images和labels以一定比例(如8:2)划分为训练集:验证集,并通过DataLoader装入指定容器中(这就是框架的厉害之处之一啦);
- 搭建网络模型,卷积层、池化层、全连接层、前反向传播、激活函数等等一些巴拉巴拉。可以是简单的ResNet18,或者别的更复杂的模型,当然大家也可以直接调用框架的API,这样更方便;
- 将模型封装,并进行数据输入、优化器、配置模型,进行超参数设置来训练模型与评估。训练用的是训练集,评估用的是验证集哦。
在这里强烈建议大家学习网络模型,炼丹的话先去手撕一遍Resnet18,帮助很大!!!
好啦,很感谢飞桨提供的这次学习的机会,大家一起学习一起进步!