零基础看深度学习python代码的基本方法

编程入门 行业动态 更新时间:2024-10-08 10:50:51

零基础看<a href=https://www.elefans.com/category/jswz/34/1769690.html style=深度学习python代码的基本方法"/>

零基础看深度学习python代码的基本方法

零基础看深度学习python代码的基本方法

  • 0.背景
  • 1.前提准备
  • 2.🌟一个例子,把方法说清楚
    • 2.1 第一步:代码来了,啥也不懂就先运行试试
      • 方法1:遇到报错先翻译
      • 方法2:遇到报错“复制后百度”
    • 2.2 第二步:跑通代码后,逐句写注释
      • 方法3:通过打印就知道在干什么了!!
      • 方法4:代码拆解观察,逐步看懂整个句子
      • 方法5:进入类里,逐句看方法
      • 方法6:B站视频法
  • 3.总结
    • 1. 翻译法(推断法)
    • 2. 百度法(检索法)
    • 3. 打印测试法(核心🌟)
    • 4. 代码拆解法(核心🌟)
    • 5. 进入类里观察法
    • 6. B站视频法

0.背景

很多同学在深度学习的学习过程中,最头疼的就是看代码,觉得自己看一句不会一句,容易陷入恶性循环。
本教程旨在为大家总结一套基本的代码阅读方法和技巧,帮助大家能够顺利地把代码读通顺。

提前罗列一下方法:
总结一下,方法按照使用顺序包括:

  1. 翻译法(推断法)
  2. 百度法(检索法)
  3. 打印测试法(核心🌟)
  4. 代码拆解法(核心🌟)
  5. 进入类里观察法
  6. B站视频法

1.前提准备

阅读代码之前,你需要准备好一个流行的代码编译器例如pycharm,相信看代码的你,这个已经装好了,如果没装好的话可以看我的其他博文。
如果条件允许,再安装一个jupyter就再好不过了,它能够帮助你快速分析,不必像pycharm那样从头运行代码。

2.🌟一个例子,把方法说清楚

我们拿动手学深度学习(李沐)书上的一段代码,来做例子,讲解python深度学习的基本知识和代码阅读流程:

import d2l
import torchn_train, n_test, num_inputs, batch_size = 20, 100, 200, 5
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05
train_data = d2l.synthetic_data(true_w, true_b, n_train)
train_iter = d2l.load_array(train_data, batch_size)
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)

2.1 第一步:代码来了,啥也不懂就先运行试试

首先,我们把这段代码放到pycharm中运行,看看结果?


我们会发现,从开始就出问题了?报了一堆红色的错误!那怎么办呢?
翻译+百度。

方法1:遇到报错先翻译

翻译:d2l这个模型里没有synthetic_data属性?

注意了,这里补充一个知识点,python中import后面的内容是导入的包(也叫类),包(类)的下面通常有很多方法,通过"包名.方法"的方式,我们可以调用方法下面的方法,方法有时候也称作属性

通过翻译,我们知道d2l下面,没有synthetic_data这个方法,这说明这个包倒入错误!!

方法2:遇到报错“复制后百度”

然后我们去百度检索到底应该用哪个包!
首先,我们复制AttributeError: module 'd2l' has no attribute 'synthetic_data'这段错误到百度中直接搜索,看看会不会有一些解决方案。

大量的方案,告诉我们,就是包里没有这个方法,我们就考虑难道是导入错了?
于是,我们直接去李沐课程官网,找原代码。

确实导入错了,于是我们改写代码,重新运行。


显示process finished with exit code 代表我们的代码没有问题啦,跑通了。

2.2 第二步:跑通代码后,逐句写注释

import math #这一句导入math这个包
import torch # 这一句导入torch包
from d2l import torch as d2l #这一句导入d2l中的torch包,并命名为d2l# 这一句看不懂了?啥意思啊,几个数,几个点?
n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5 

方法3:通过打印就知道在干什么了!!

当遇到看不懂的句子的时候,你需要把他们打印出来看看,是什么,这时候最简单的方法使用jupyter notebook!将代码放入jupyter里,并通过打印看看,每个变量是什么?

print()是一个是一个打印方法,可以帮助我们查看变量,从此我们就学会了,如何查看变量了,就是打印,用jupyter notebook运行后打印,这是一个很重要的代码学习方法,一定要记住,当你不知道代码干了什么的时候,你就打印出来过看,然后你就学会了!!!!

方法4:代码拆解观察,逐步看懂整个句子

import math #这一句导入math这个包
import torch # 这一句导入torch包
from d2l import torch as d2l #这一句导入d2l中的torch包,并命名为d2l# 这一句代表,为四个变量赋值四个数字,含义就是英语单词的含义
n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5 #这一句又看不懂了!!什么乱七八糟的啊? torch.ones()是什么?torch.ones(())是什么? 
#torch.ones((num_inputs,1))是什么?torch.ones((num_inputs,1))*0.01是什么? 
#到底这都是什么啊? 深度学习好难啊!!!! 要疯掉了!!!
#啥也不会怎么学啊?????
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05

每个0基础的代码学习者,都会遇到上面一堆困难,一堆问题。

  1. 首先,通过提问题的方式对代码进行拆解,上面已经通过大量的疑问句把这个代码拆解成了很多小段了?
  2. 拆解完成之后就是利用上面讲过的方法2:百度和方法3:打印观察来分析每一个小东西是什么,最后弄明白整行代码!

方法2:百度,先去百度torch.ones(())是在干什么?然后你就懂了,他是在生成一个全为1的矩阵。但是这个百度的方法,有时候需要耗费精力。那么你就用方法3:打印

方法3:打印观察

我们发现,torch.ones((2,1))是在生成一个2*1的矩阵,矩阵内容全部是浮点数字1,那么torch.ones((num_inputs,1))就是在生成一个num_inputs行,1列的全为1的矩阵。
torch.ones((num_inputs, 1)) * 0.01是什么意思呢?
我们继续用方法3:打印测试


我们发现,就是对矩阵里所有的数字进行了乘法操作白~

true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05这一整句话是什么意思呢?
继续使用方法3:打印测试

通过方法4*拆解方法3:打印测试,我们一下子就明白了,这句话就是生成一个大小为2*1的值全为0.01矩阵和一个数字0.05,并把矩阵和这个数字分别赋值给true_w,和ture_b。 意思是真实的w和真实的b

方法5:进入类里,逐句看方法

import math #这一句导入math这个包
import torch # 这一句导入torch包
from d2l import torch as d2l #这一句导入d2l中的torch包,并命名为d2l# 这一句代表,为四个变量赋值四个数字,含义就是英语单词的含义
n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5 #生成矩阵true_w和数字b
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05
# 这一句又看不懂了,啥啊,synthetic_data到底是在干什么? 是什么啊?
# 真的无语了?哪里来的synthetic_data啊?
train_data = d2l.synthetic_data(true_w, true_b, n_train)

我们在前面普及过了,类里会有很多方法,而d2l就是一个类,synthetic_data就是类里的方法,通过翻译我们知道这个方法名为“人造数据”,我们很容易猜出来,这个方法是用来生成数据的。 但是,我们怎么知道,它到底怎么做的呢?
这个时候,我们需要进去看看,我们通过键盘上的ctrl键+鼠标左键放置在synthetic_data这方法上单击一下,


你会发现,你可以看到方法的全貌了,这样,你就可以把方法摘出来,一句一句分析了。

# 一个方法,输入了3个变量,分别是w,b,num_examples
def synthetic_data(w, b, num_examples):
# 对方法的解释,翻译为:产生 y= Xw+ b + noise"""Generate y = Xw + b + noise.Defined in :numref:`sec_linear_scratch`"""# 这句看不懂X = d2l.normal(0, 1, (num_examples, len(w)))# 这句看不懂y = d2l.matmul(X, w) + b# 这句看不懂y += d2l.normal(0, 0.01, y.shape)# 这个是返回了X,d2l.reshape(y,(-1,1))return X, d2l.reshape(y, (-1, 1))

你会发现,你看不懂,这里我们仍然采取方法2:百度和方法3:打印测试
通过方法5:进入类里和方法3:百度,我知道饿了d2l.normal是生成符合某种分布的随机数。
然后,也可以直接用我最喜欢的方法3:打印测试,这样就不必百度学方法具体的使用了,我就想知道它到底干了什么就行!

我发现,这句话就是生成尺寸为num_examples*len(true_w)的,0为均值,1为方差的随机数嘛,太简单了

# 一个方法,输入了3个变量,分别是w,b,num_examples
def synthetic_data(w, b, num_examples):
# 对方法的解释,翻译为:产生 y= Xw+ b + noise"""Generate y = Xw + b + noise.Defined in :numref:`sec_linear_scratch`"""# 生成尺寸为(num_examples, len(w))的随机矩阵X = d2l.normal(0, 1, (num_examples, len(w)))# 这句看不懂? 测试法:矩阵乘法+常数by = d2l.matmul(X, w) + b# 这句看不懂? 测试法:生成均值为0,方差为0.01的和y尺寸相同的随机数矩阵,然后加到y上,其实就是实现了y= Xw+ b + noisey += d2l.normal(0, 0.01, y.shape)# 这个是返回了X,d2l.reshape(y,(-1,1))# d2l.reshape(y,(-1,1))是什么意思呢? 测试法!!!# 通过测试可知,返回num_examples*len(w)尺寸的特征矩阵和num_examples*1的标签矩阵return X, d2l.reshape(y, (-1, 1))

y = d2l.matmul(X, w) + b

y += d2l.normal(0, 0.01, y.shape)

d2l.reshape(y, (-1, 1))


上图发现,没有变化啊
我们再改造一下

哦~ 懂了,就是reshape重塑的意思,按照行数随意(-1)代表随意,列数为1,对矩阵重新改造形状。

方法6:B站视频法

对于很多不懂的知识,除了百度法之外,如果不喜欢文字类解释,还可以去B站找视频学习,有很多创作者上传了各种知识的不同讲解,多看几个,你就会总结出自己的见解啦.
/

3.总结

方法讲完了,剩下这几句就不管了。

train_iter = d2l.load_array(train_data, batch_size)
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)

总结一下,方法按照使用顺序包括:

1. 翻译法(推断法)

2. 百度法(检索法)

3. 打印测试法(核心🌟)

4. 代码拆解法(核心🌟)

5. 进入类里观察法

6. B站视频法

更多推荐

零基础看深度学习python代码的基本方法

本文发布于:2024-02-19 15:37:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764574.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:深度   代码   基础   方法   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!