2024-08-10, 20:05-今日內容

Overloaded operator 也就是我们重新赋予+ 好 -号 新的意义 特别牛逼 Inheritance 继承在Python 里面的用法 Super().init(name)在干什么。 @classmethod就是把class里面的function或者method弄成可以直接获取的一个的一个方法 Random.choise 可以从一个list里面,随机的选择一个东西出来 {} 看到这个括号。就知道 这是个dictionary了 Getter 和 setter 在python里的作用 为了防止别人来更改你写的class代码,你要用一些@ 来防止别人 Attention value 和 Wei 批次矩阵乘法 (B, T, C) 在pytorch 里面就是torch.bmm()A * B torch里的transpose是什么意思 Torch.randn(B, T, C) Single head attention match 和case的搭配使用, 默认的是_(其实就是default 的意思) dunder method是啥也就是__init__ , str (si 特儿) F string 可以直接返回 写成这样的形式 Class 里面的__str__是python自带的。我们咋给class做了实例之后,就可以print这个class Is 和 is not , not in 和in ValueError是什么意思 not在python中的是什么意思 如果你不确定你写的对不对,就用try 和except 来写 如果你想丢出一个错误,告诉别人或者用这个code的人,你告诉他们 ,他那里有error。可以用raise populate a value 就是填充 class 在python里面是什么 python里面的省略号码dadada 是什么意思… Dictionary 是有不同的key的 也就是不同的索引或者属性 Python 不能在双引号里面再加双引号。 要把里面的双引号改成单引号 否则python不认识 numbed. torch.nn.Linear 在做什么 在Jupyter notebook 里面怎么生成好看的latex lm_head 是什么意思 他是怎么计算出来的 vocab_size 就是时间序列T的长度 global variable torch 的 Rand 的用法 下三角matrix和soft Max的妙用(生成时间序列,并且添加attention,不看未来的data) 维度的选择 -1是什么意思 Torch 的functional 都在那里 无穷在python 里面的表达 Torch.tril 下三角函数 序列数据的trick 函数的签名 signature 是什么意思 BoolTensor 啥意思

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Overloaded operator 也就是我们重新赋予+ 好 -号 新的意义 特别牛逼 看这个例子。 你可一看到potter + Wearley 中间的那个加号,就是我们给他的新的意义!!! Dundee method add!!!! 牛逼啊了。 金罐子可以加上金罐子 然后返回的还是一个金罐子,但是是新的!。 每个金罐子里面的钱都分好类别,加好了。 没想到金罐子还能相加

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Inheritance 继承在Python 里面的用法 其实就是因为一些特征不想重复写来写去,一些函数或者检测方法不想写来写去,我们才会用继承的。 一般就是在class 的名字后面加一个括号,写上你要继承的class的名字就好了。 所有你继承的class的function都会一并弄过去。 如果你要覆盖,其实也是可以的。

还有就是super().init(你给他把你收到的variable传过去就好了) 这就完成了你上面那一层的初始化

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Super().init(name)在干什么。 因为我们继承了他,所以我们可以通过呼叫super,把我们拿到的那么的variable传递给他。这样super的class就可以initialize他的class了。 这个super的呼叫,一般我们都写在继承的class的init里面。因为我们在init的时候,才会继承init。 init 和super init 就应该写在一起。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

@classmethod就是把class里面的function或者method弄成可以直接获取的一个的一个方法 我们可以不用呼叫self,直接有convention吧self搞成cls 。 然后我们就不用每次都initiate这个class,而是直接class的名字,在接他的function 就可以呼叫这个class的函数了 超级方便。 注意这个@class method是在class的method里面定义的。 不是在class的外面定义的。 他就是对method进行的一个转换!

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Random.choise 可以从一个list里面,随机的选择一个东西出来 但是要先import random

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

{} 看到这个括号。就知道 这是个dictionary了 我们可以试试

print(type({}))

他的回执 就是class dictionary!!!

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Getter 和 setter 在python里的作用 getter 就是帮助你拿到class里的某些value

setter就是帮助你设置class里面的某些value

一般来说我们可以让一些不想改变的属性用setter来做,只需要给他加上@属性(也就是函数的名字),再加上一个小点,再加上一个setter。 (你必须先创建他的getter,也就是用@property 这样的,来return他的value) getter就是 17 # Getter ~ 18 @property (最重要) ~ 19 def house(self): ~ 20 return self._house

Setter 就是就是这样比如

22 # Setter ~ 23 @house.setter (最重要) ~ 24 def house(self, house): ~ 25
~ 26 if house not in [“benny”, “brittany”, “angrign on”]:
~ 27 raise ValueError(“Invalid house”) 28 return self._house

(注意这里的variable self._house 命名是convention。因为函数的house 已经叫了house的名字了,variable 要叫一摸一样的名字,只能委屈求全加一个underscore 了)

这里的student后面跟着的小点,就是python知道我们要更改的重点。他看到这个小点,就回去检测,这个我们正在呼叫的东西是不是getter或者setter的东西,防止你乱写代码。

Str.lowercase() 其实就是class的一个function(aka method!!!!)

就是python的爹给创建的,我们只是访问了他的function,拿到了一个回执而已!!

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

为了防止别人来更改你写的class代码,你要用一些@ 来防止别人 这种就叫做decorator(就是可以更改别的function的东西,他也是一个function) 这种property是python自带的function。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Attention value 和 Wei  最后一个token 会说,现在我在第几号位置,我的重要性或者我面临的车辆是什么。 现在我要对所有历史的记录进行请求,看看谁对我来说最重要。

After we get softmax(wei) we can do

Wei @ x —>

out = wei @ x # (B, T, T) * (B, T, C) = (B, T, C) out.shape

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

批次矩阵乘法 (B, T, C) 在pytorch 里面就是torch.bmm()A * B 

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

torch里的transpose是什么意思 torch.transpose(-1, -2)就是说 你给他维度的位置,比如-1 就是最后一个维度 -2就是倒数第二个维度

那么他就会把这两个维度里面包含的所有的东西 都帮你transpose掉 你懂吗

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Torch.randn(B, T, C) 这是深沉的放洋葱正态分布的三个维度, 每个维度的shape分别是BTC 的tensor的矩阵

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Single head attention K* query

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

match 和case的搭配使用, 默认的是_(其实就是default 的意思) 用法是这样的 match 的是一个variable:

case 如果我们竞猜 这个variable的值是啥啥啥,我们就进行第一步操作 case 我们说假如是某一个啥啥啥,我们进行这一步的操作 case _ 就代表的是之前的所有都没有match ,我们就进行这一步default的操作。

这有一个简单的例子:

def http_status(status): match status: case 200: return “OK” case 404: return “Not Found” case 500: return “Server Error” case _: return “Unknown status”

print(http_status(200)) # 输出: OK print(http_status(404)) # 输出: Not Found print(http_status(123)) # 输出: Unknown status

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

dunder method是啥也就是__init__ , str (si 特儿) Dunder 是double underscores 双下划线的缩写 也就是__init__ , str 这两个方法。 中国人叫他们魔术方法. 他们在某些情况下会由python自己调用哦

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

F string 可以直接返回 写成这样的形式 return f”{self.name} from {self.house}”

注意我没有加上任何的括号哦

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Class 里面的__str__是python自带的。我们咋给class做了实例之后,就可以print这个class 他就会返回给我们这个class自带的__str__给我们 这个__str__是个method。 我们可以自己给这个method任何我们想要输出的解释性的东西。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Is 和 is not , not in 和in is 和not in 是不能连用的。 不能说is not in 要不你就说什么东西is 什么东西

或者什么东西is not 什么东西

你也可以说什么东西 in 什么东西 或者你可以说什么东西 not in 什么东西

注意,is 和is not 就是比较两个variable是不是完全一样

in 就是来判断一个东西是不是在某一个元祖或者列表list里面。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

ValueError是什么意思 他是python里面的一种error的类型,也就是说他的类型,也就是int float 或者啥啥的, 这种宏观的都是正常的,但是就是value的内容不正常。 我们就会抛出这种error给用户。 一般来说就是 try 啥啥啥: 然后 except ValueError: 这里的except就是说ook, 你现在想让我try,或者试着运行啥啥啥,但是我告诉你,我碰到了valueError。现在我该咋办。你就让他进行遇到error里面的操作就好了。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

not在python中的是什么意思 除了是反🙅的意思,还有一个就是检查variable是不是空的,或者说是不是false

一个简单的例子: if not name 就是想要检查那么是不是空的字符串,也即是我们没有给他赋予任何的内容或者value。,或者其他等价于False的value,None就算。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

如果你不确定你写的对不对,就用try 和except 来写 比如说try: Return Student(name, house) Except Error:

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

如果你想丢出一个错误,告诉别人或者用这个code的人,你告诉他们 ,他那里有error。可以用raise

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

populate a value 就是填充 pop pop

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

class 在python里面是什么 其实就是属于我们自己的属性,一个东西如果他有某一些特殊的含义,我们就把他搞成class。他的很多奇怪的东西都可以用小点儿来access 我们可以这么定义class

class Student: …

别忘了,一般来说class的名字都是大写的开头,这是convention。 还有冒号也别忘了。

每次创建class的时候,当我们吧一个class赋予给一个variable的时候,我们都在创建一个object(或者说一个实例)!!!

每次在定义class的时候,他就会自己创建一个function。 但是是用大写的开头,比如这个Student。 具体是通过__init__(self)来实现的。 class里面的function又个特殊的名字,就是method。 也就是我们可以用小点儿来呼叫的。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

python里面的省略号码dadada 是什么意思… 就是等会再写的意思。一个class或者一个function是空的,就可以这么写出来。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Dictionary 是有不同的key的 也就是不同的索引或者属性 我们可以说 get_student是一个dict 那么,student的那么是他的一个属性, student的house又是一个他的属性

那么在字典里 可以这么说:

{‘name’: name, ‘house’: house}

第一个字段永远都是一个我们自己给它赋予的好记的名字,然后才有它对应的不同的value。 第二个属性也是要先给名字,然后再对应他的value。

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Python 不能在双引号里面再加双引号。 要把里面的双引号改成单引号 否则python不认识

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

numbed. 

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

torch.nn.Linear 在做什么 构建一个linear layer 也就是说白了.就是创建一个linear layer。把他接收到的n_embedding 的tensor映射到维度vocab_size 上面去。

注意,是feature映射到data! pytorch就是这么定义的 torch.nn.Linear(n_emb, vocab_size) 就是n_emb —> vocab_size 的映射

他会在背后帮我们创建w 和 b(自己initialize)

运用y = X @ W^T + b 这个公示

这里默认了你的X就是适合编码的那个shape 也就是说 X.shape —-> (Batch_size, n_emb) 那么 X W + B 中W的shape就是:

W.shape —-> (vocab_size, n_emb) 所以W的transpose才是(n_emb, vocab_size)

b的shape 是: (vocab_size, )

那么输出的就是: (batch_size, vocab_size)

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

在Jupyter notebook 里面怎么生成好看的latex

  1. cell变成markdown
    1. $随便你写一行的公式$
    2. \[随便你写多少汗的公式\]

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

lm_head 是什么意思 他是怎么计算出来的 language model head

最简单的方式,用一个linear layer来构建:

也就是n_emb * vocab_size

也就是通过每个word的embedding的feature数量来乘word的数量。 也就是说

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

vocab_size 就是时间序列T的长度 global variable n_embedding 就是每个word或者每个位置的坐标的embedding的feature的长度。 可以很长,也可很短。他用了32 n_embedding = 32

Batch_size = 32 (常用,一次性让GPU跑32条数据序列)

embedding table: 是用vocab_size , num_embedding组合起来的lookup table.

我们initialize一个model的时候,总是需要先把这个lookup table 给我们这个model。 也就是通过self. 给到每个model这个属性

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

torch 的 Rand 的用法 Torch.rand 是生成的uniform的数据。也就是0-1区间的

torch.randn 是生成的normal distribution的分布的数据,也就是服从gaussian distribution

torch.randint 生成的是符合你想要的形状的数据,给他一个low,一个hight, 一个size的矩阵用()狂起来就可以了

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

下三角matrix和soft Max的妙用(生成时间序列,并且添加attention,不看未来的data) 

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

维度的选择 -1是什么意思 就是最后一个维度!

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Torch 的functional 都在那里 不在torch.functional里面

在torch.nn.functional里面。 永远记住这些方程都是在nn里面。 比如softmax()

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

无穷在python 里面的表达 正无穷: 1. :float(‘inf’) 2. :math.inf

负无穷: 1. :float(‘-inf’) 2. :-float(‘inf’) 3. -math.inf

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

Torch.tril 下三角函数 序列数据的trick lower triangular part

会把你输入的作为input的部分,保留下来下部分的三角,然后三部分的三角会搞成0

 一个简单的例子: torch.tril(boolmark, input) 可以是 bool mask一般都接受bool类型的返回值,我们可以用一个等式来判断 也就是:

为。trill == 0 这个表达式,可以判断哪个位置的元素是0 ,如果司,就把那个位置的原则搞成True 这种bool类型

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

函数的签名 signature 是什么意思 就是指定函数接受的variable还有这些variable的type类型的。 一般help文档的最上头就是这个signature

一个小小的例子:
PyTorch 的官方文档里面,对于是tensor 的每一个variable来说,他都可以有这个函数
maked_fill(mask, value)

这个后面紧接着就是一段文字告诉你这个函数这么用,接下里就是他的Args,也就是告诉你variable 接受的输入的类型:

mask (BoolTensor) 也就是接受bool 类型的mask. 作为面具,并且这个mask必须放在tensor的matrix里面对接下来的value进行指导

Value (float) 就是告诉你,你需要change的矩阵长什么样子, 然后告诉你。你给我的矩阵必须是float 类型的。 他这个函数的目的就是要改变你的这个value矩阵, 改变的方式就是之前你告诉他的mask。 一般这个函数都是跟着torch.tril() 或者torch.ones() 或者torch.zeros() 还有float(‘-inf’)等等的一起用的来做时间序列的数据的新的数据库的创建

#time_series #torch #torch_tril #masked_fill #torch_ones #torch_zeros

🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️

BoolTensor 啥意思 首先它是一个bool 其次它是一个tensor包裹着的你的bool

所以就是tensor里面的数据类型都是bool

#匯總今日內容