这是本人第一次参加夏令营,规划以类似日记的格式来写,会在每一个day内讲明白自己干了什么,学了什么,学习感悟,有哪些问题,有无解决,如何解决等方面,同时也练习一下markdown格式的使用
参加夏令营的原因
作为软件工程专业的学生,大一只学习了C/C++,虽然对深度学习感兴趣,但是之前或许是时间管理不善,没有在课余时间进行学习,参加夏令营是为了在暑假以任务为导向来学习深度学习和python,自认为会有更好的效果。
Day -NaN~-1(开营前)
先是配环境,又是visual studio 又是VS code 又是 Anaconda,又不小心下了多个版本的python,碰到的问题包括但不限于:
1.cmd输入python又给我跑到微软应用商店要求下载了
解决方法:添加python的地址啥的到环境变量
2.‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
解决方法:在系统中找到Python安装路径,pip程序存放在Scripts文件夹下,打开Script后复制完整路径丢到环境变量里去
3.Defaulting to user installation because normal site-packages is not writeable
我当时也懵逼了,等了一会它自动开始下载
遗留的问题:
我还真是饱和式安装啊,VScode装了python,Visual Studio又装了python,然后pip install的那些库只能在VScode里用,VS里不能用,可能是这俩用的python不同吧(我没有统一化)
先前的学习:
大一没有学习python只学了C/C++,事先下载了两本鱼书,先读的深度学习入门,不过那会还没有配置好环境,加上本身对python不太熟悉,看了一半也是懵懵的,可能也是没有做好笔记的缘故,总感觉这点时间被浪费了
就这样,先前似乎无效预习的我步入了夏令营
Day0:
7.25这一天早早的就发布了任务:入群第一步–跑通BaseLine
Baseline是啥?其实就是官方提供的一份基础答案,你得到了它啥都不需要做,直接在服务器的GPU训练,并将作为结果的csv文件提交【好吧我其实对csv格式也不了解,太小白了啦!】,就会有分数(当然分数很低,只有50.38分)说明后续优化之路漫漫,可惜我现在会的不多
拿到分数并且打了卡之后,总算是松了一口气,想沉下心来读读代码,可惜还是没看懂啊,后来想在本地部署一下模型本地跑(免得浪费珍贵的GPU小时数),结果告诉我我之前辛辛苦苦装的numpy库太新了跑不了(我勒个娘啊),还有一些奇怪的报错如下:
👆如上,我主要担心的torch, numpy,pandas没出错,这些奇奇怪怪的别的库居然出错了,也是挺神奇·,有人知道怎么解决么?
👇如下,它说我numpy库太新运行不了,想吐槽一下向后兼容性这么低么😂
Day1(7月27日)
今天进行了开营直播,解析了赛题背景,演示了Baseline的过程,并概览了Baseline的思路
首先理解一下赛题
比较直白,让我回忆起了高中的知识,但是具体要干啥呢,我们都有哪些可以利用的资源?接着往下看
打开一下这个traindata
在这里没有看明白siRNA是如何修饰的
后面看了看,似乎没什么有用信息,于是来看这个深度学习是怎么进行的吧:
关于1,没什么问题
关于2,让我们先看PPT咋说的
PPT是跳一个选三个,但是为什么呢?有什么隐藏的道理么,再看看代码
class GenomicTokenizer:
def __init__(self, ngram=5, stride=2):
# 初始化分词器,设置n-gram长度和步幅
self.ngram = ngram
self.stride = stride
def tokenize(self, t):
# 将输入序列转换为大写
t = t.upper()
if self.ngram == 1:
# 如果n-gram长度为1,直接将序列转换为字符列表
toks = list(t)
else:
# 否则,按照步幅对序列进行n-gram分词
toks = [t[i:i+self.ngram] for i in range(0, len(t), self.stride) if len(t[i:i+self.ngram]) == self.ngram]
# 如果最后一个分词长度小于n-gram,移除最后一个分词
if len(toks[-1]) < self.ngram:
toks = toks[:-1]
# 返回分词结果
return toks
目前python基础比较薄弱,让AI来帮我们准备一个宝宝级别的注释~
# 我们定义了一个叫做 GenomicTokenizer 的东西,它是一个工具,用来把一串字符(比如基因序列)切分成小块。
class GenomicTokenizer:
# 这是这个工具的构造方法,用来初始化它。
def __init__(self, ngram=5, stride=2):
# ngram 就是每个小块的长度,比如你想让每个小块有5个字符。
# stride 是指在切分时,每次跳过多少个字符再切下一个小块。
self.ngram = ngram
self.stride = stride
# 这是这个工具的主要功能,用来把一串字符切分成小块。
def tokenize(self, t):
# 首先,我们把输入的字符全部转换成大写,这样处理起来更统一。
t = t.upper()
# 如果小块的长度是1,那就很简单了,直接把它变成一个字符列表。
if self.ngram == 1:
toks = list(t)
else:
# 如果小块的长度大于1,我们就需要按照 stride 的步幅来切分。
# 这里用了一个技巧,叫做列表推导式,它是一种快速生成列表的方法。
# 它会从序列的开头开始,每次跳过 stride 个字符,然后切出一个长度为 ngram 的小块。
toks = [t[i:i+self.ngram] for i in range(0, len(t), self.stride) if len(t[i:i+self.ngram]) == self.ngram]
# 但是,如果最后一个小块的长度不够 ngram,我们就不要它了。
# 因为一个不完整的小块可能没有足够的信息。
if len(toks[-1]) < self.ngram:
toks = toks[:-1]
# 最后,我们把这个切分好的小块列表返回。
return toks
时间一闪而过,来到了Day7 也就是8月三号
夏令营活动进入了尾声,在这期间,我也看了不少网课试图弄明白代码,这是之前记下的笔记:
https://blog.csdn.net/Nakkhon/article/details/140825753?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140825753%22%2C%22source%22%3A%22Nakkhon%22%7D
网课的进度看到了讲解RNN神经网络,可惜还是只对它有一个比较浅的了解,带着生物知识阅读baseline对我来说,还是像天书一样难以看懂啊(悲)
所以第一个结论可以说
这个夏令营对基础较弱的同学而言,不友好
虽然说,完全零基础,也能做,但是能做的仅仅也就是完成第一次task的打卡罢了(可以混个结营证书)
一开始其实是抱有报了夏令营之后会有人带或多或少也能在空闲的假期里给脑子塞上一点想学的知识,自己只要被动接受就好了,结果报了名后才发现,到了大学以及以后,很少会有再向高中一样给你脑子里塞知识的机会了,更多的,还得是靠自我的动力,靠自学。
学习了一些代码之后试着去调参数,第一次照着自己的理解调参,降低了学习率,增加了迭代次数等,结果,分数反而比baseline更低,只有0.4777,可能是出现了过拟合(自己上的网课还没教到),但是目前没有清晰的思路去调整
第二个结论:夏令营期间看的三次直播对基础较弱的同学,基本上没有作用
最初最初,以为夏令营的三次直播应该会比较细致的讲解,就像一些速通课一样,能让你熟练应试,可惜一次不落看了直播的我发现,或许还是知识储备不足,到了专业些的地方就开始听天书(悲),是啊,一次只有短短一小时的直播能干什么呢?这边给小白的建议还是把这些时间移动到基础知识的补习上,如果是纯小白,这些知识真是很难一时半会搞懂的 哦?如果连python都不咋会?那还是打个task1拿结营证书好了
后来,我根据Task3加上自己的一点知识和查的资料,试图优化一下我对模型,结果直接开始轮番报错,修了一个报另一个,算是让我彻底没脾气了TT
最后,还是给自己这段不完美的夏令营画上句号,接下来,我绝对不会放下自学的脚步,让我们下次夏令营再见,希望到时候,我不会像这次一样狼狈!!