MaryamKarimi080 commited on
Commit
d48d4f3
·
verified ·
1 Parent(s): bb7a6dc

Upload 160 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +22 -0
  2. data/6S191_MIT_DeepLearning_L4_2.pdf +3 -0
  3. data/Black_board.py +294 -0
  4. data/CTC.pdf +3 -0
  5. data/CTC_Loss_Commands.pdf +3 -0
  6. data/CTC_Loss_Example_yes_no_rec.ipynb +0 -0
  7. data/CTC_transcript_part1.txt +60 -0
  8. data/CTC_transcript_part2.txt +60 -0
  9. data/GAN_Lab_transcript_part1.txt +60 -0
  10. data/GAN_Lab_transcript_part2.txt +12 -0
  11. data/GAN_MNIST.ipynb +0 -0
  12. data/GAN_transcript_part1.txt +60 -0
  13. data/GAN_transcript_part2.txt +60 -0
  14. data/GAN_transcript_part3.txt +2 -0
  15. data/Huggingface_Transformers_Bert_ViT.ipynb +0 -0
  16. data/Images_edit_introduction.ipynb +0 -0
  17. data/LLM-Part1_transcript_part1.txt +60 -0
  18. data/LLM-Part1_transcript_part2.txt +60 -0
  19. data/LLM-Part1_transcript_part3.txt +60 -0
  20. data/LLM-Part1_transcript_part4.txt +20 -0
  21. data/LLM-Part2_transcript_part1.txt +60 -0
  22. data/LLM-Part2_transcript_part2.txt +60 -0
  23. data/LLM-Part2_transcript_part3.txt +60 -0
  24. data/LLM-Part2_transcript_part4.txt +18 -0
  25. data/MNIST_CNN.ipynb +0 -0
  26. data/NumPy_SCR_Fa401.ipynb +0 -0
  27. data/OpenCV_introduction_transcript_part1.txt +60 -0
  28. data/OpenCV_introduction_transcript_part2.txt +58 -0
  29. data/Python_Basics.ipynb +0 -0
  30. data/Python_Basics_transcript_part1.txt +50 -0
  31. data/Python_Tutorial_Level_0.ipynb +1020 -0
  32. data/Pytorch_CNN_Tutorial_SCR.ipynb +0 -0
  33. data/Pytorch_Session_transcript_part1.txt +60 -0
  34. data/Pytorch_Session_transcript_part2.txt +60 -0
  35. data/Pytorch_Session_transcript_part3.txt +36 -0
  36. data/Pytorch_Tutorial.ipynb +1340 -0
  37. data/Pytorch_Tutorial_SCR.ipynb +0 -0
  38. data/SCR_Chapter00_course_outline.pdf +3 -0
  39. data/SCR_Chapter01_Introduction.pdf +3 -0
  40. data/SCR_Chapter02_DesignandInteraction.pdf +3 -0
  41. data/SCR_Chapter03_ContinualLearning.pdf +3 -0
  42. data/SCR_Chapter03_MachineLearning_Part01_MLP.pdf +3 -0
  43. data/SCR_Chapter03_MachineLearning_Part02_CNN.pdf +3 -0
  44. data/SCR_Chapter03_MachineLearning_Part03_RNN.pdf +3 -0
  45. data/SCR_Chapter04_DesignHRI.pdf +3 -0
  46. data/SCR_ContinualLearning(EWC).ipynb +316 -0
  47. data/SCR_HW1.pdf +3 -0
  48. data/SCR_HW1_14022.pdf +3 -0
  49. data/SCR_HW2.pdf +3 -0
  50. data/SCR_HW2_14022.pdf +3 -0
.gitattributes CHANGED
@@ -34,3 +34,25 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  db/chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  db/chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text
37
+ data/6S191_MIT_DeepLearning_L4_2.pdf filter=lfs diff=lfs merge=lfs -text
38
+ data/CTC_Loss_Commands.pdf filter=lfs diff=lfs merge=lfs -text
39
+ data/CTC.pdf filter=lfs diff=lfs merge=lfs -text
40
+ data/modified_HMM.pdf filter=lfs diff=lfs merge=lfs -text
41
+ data/rabiner89.pdf filter=lfs diff=lfs merge=lfs -text
42
+ data/SCR_Chapter00_course_outline.pdf filter=lfs diff=lfs merge=lfs -text
43
+ data/SCR_Chapter01_Introduction.pdf filter=lfs diff=lfs merge=lfs -text
44
+ data/SCR_Chapter02_DesignandInteraction.pdf filter=lfs diff=lfs merge=lfs -text
45
+ data/SCR_Chapter03_ContinualLearning.pdf filter=lfs diff=lfs merge=lfs -text
46
+ data/SCR_Chapter03_MachineLearning_Part01_MLP.pdf filter=lfs diff=lfs merge=lfs -text
47
+ data/SCR_Chapter03_MachineLearning_Part02_CNN.pdf filter=lfs diff=lfs merge=lfs -text
48
+ data/SCR_Chapter03_MachineLearning_Part03_RNN.pdf filter=lfs diff=lfs merge=lfs -text
49
+ data/SCR_Chapter04_DesignHRI.pdf filter=lfs diff=lfs merge=lfs -text
50
+ data/SCR_HW1_14022.pdf filter=lfs diff=lfs merge=lfs -text
51
+ data/SCR_HW1.pdf filter=lfs diff=lfs merge=lfs -text
52
+ data/SCR_HW2_14022.pdf filter=lfs diff=lfs merge=lfs -text
53
+ data/SCR_HW2.pdf filter=lfs diff=lfs merge=lfs -text
54
+ data/SCR_HW3_14022.pdf filter=lfs diff=lfs merge=lfs -text
55
+ data/SCR_HW3.pdf filter=lfs diff=lfs merge=lfs -text
56
+ data/SCR_HW4_14022.pdf filter=lfs diff=lfs merge=lfs -text
57
+ data/SCR_LLM_LMM.pdf filter=lfs diff=lfs merge=lfs -text
58
+ data/Transformer.pdf filter=lfs diff=lfs merge=lfs -text
data/6S191_MIT_DeepLearning_L4_2.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9e0a77d1ac71a2d9cd51aafab73dbee56cb1645641896654d4f234a9265a8099
3
+ size 6824768
data/Black_board.py ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+
3
+
4
+ #*******************************
5
+ # dokme black tanha baraye halate tasvir ghabele estefade ast na baraye halate mogheyat.
6
+ # dar halate mogheyat darsurat eshtebah dar rasm bayad kole safhe pak shavad
7
+ #*******************************
8
+
9
+ from os import environ
10
+ environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1'
11
+
12
+ import pygame
13
+ from pygame.locals import *
14
+ import time
15
+ import os
16
+ import numpy as np
17
+ import random
18
+ import cv2
19
+ from keras.models import load_model
20
+ import math
21
+
22
+ class Graphic:
23
+
24
+ Button_state={"Color": "White"}
25
+ x_y_of_number=[]
26
+ data=[]
27
+
28
+ def __init__(self):
29
+
30
+ pygame.init()
31
+ #infoObject = pygame.display.Info()
32
+ #self.screen = pygame.display.set_mode((infoObject.current_w, infoObject.current_h),FULLSCREEN)
33
+ self.screen = pygame.display.set_mode((960, 540))
34
+ self.clock = pygame.time.Clock()
35
+ pygame.display.set_caption('BlackBoard')
36
+
37
+ self.image = pygame.image.load("screen_bar.jpg")
38
+ self.black_mask=pygame.Surface((960,466))
39
+ self.black_mask.fill((0,0,0))
40
+ #self.image = pygame.transform.scale(self.image, (720, 480))
41
+ self.screen.blit(self.image, (0, 466))
42
+
43
+ self.radius = 10
44
+ self.ball_surface = pygame.Surface((self.radius*2,self.radius*2))
45
+ self.ball_surface.set_colorkey((0, 0, 0))
46
+ self.ball_surface = self.ball_surface.convert_alpha()
47
+ pygame.draw.circle(self.ball_surface, (0,255,0), (self.radius,self.radius), self.radius, 2)
48
+
49
+ self.Color_ball_surface = pygame.Surface((self.radius*2,self.radius*2))
50
+ self.Color_ball_surface.set_colorkey((0, 0, 0))
51
+ self.Color_ball_surface = self.ball_surface.convert_alpha()
52
+ pygame.draw.circle(self.Color_ball_surface, (255,255,255), (self.radius,self.radius), self.radius, self.radius)
53
+
54
+ # self.myfont = pygame.font.SysFont("Arial", 22)
55
+ # self.Line_txt_surface = self.myfont.render("1", False, (225, 255, 255))
56
+
57
+ self.model = load_model('MNIST_CNN.h5')
58
+ #self.model = load_model('MNIST_LSTM.h5') #RNN
59
+
60
+ self.brush=None
61
+ self.Hold=False
62
+ self.Button="white"
63
+ self.last_brush=(0,0)
64
+ self.img_counter=0
65
+ self.folder_name=time.time()
66
+
67
+ def mouse_rectangle(self):
68
+
69
+ buttons_rectangle = {}
70
+ buttons_rectangle["Black_pos"]=[(317,502),(331,518)]
71
+ buttons_rectangle["White_pos"]=[(334,502),(349,518)]
72
+ buttons_rectangle["Eraser_pos"]=[(354,502),(396,518)]
73
+ buttons_rectangle["Save_pos"]=[(227,485),(257,515)]
74
+
75
+ for event in pygame.event.get():
76
+ if(event.type==pygame.MOUSEBUTTONDOWN):
77
+
78
+ for P in buttons_rectangle:
79
+ if(buttons_rectangle[P][0][0]<event.pos[0]<buttons_rectangle[P][1][0] and buttons_rectangle[P][0][1]<event.pos[1]<buttons_rectangle[P][1][1]):
80
+ self.Button=P.replace("_pos",'')
81
+
82
+ if(event.button == 1):
83
+ self.brush=event.pos
84
+
85
+ elif(event.type == pygame.MOUSEBUTTONUP):
86
+ if(event.button == 1):
87
+ self.brush = None
88
+
89
+ elif(event.type==pygame.MOUSEMOTION):
90
+ if self.brush:
91
+ self.brush = event.pos
92
+ #print(self.brush)
93
+
94
+ def Buttons_check(self):
95
+
96
+ if(self.Button=="White"):
97
+ Graphic.Button_state["Color"]="White"
98
+ elif(self.Button=="Black"):
99
+ Graphic.Button_state["Color"]="Black"
100
+ elif(self.Button=="Eraser"):
101
+ Graphic.Button_state["Color"]="Eraser"
102
+ elif(self.Button=="Save"):
103
+ Graphic.Button_state["Color"]="Save"
104
+ self.Button="" #reset
105
+
106
+
107
+ def draw(self):
108
+
109
+ #print(Graphic.Button_state)
110
+
111
+ B_P=Graphic.Balls_pos()
112
+ self.screen.blit(self.ball_surface, B_P[Graphic.Button_state["Color"]])
113
+
114
+ if(self.brush):
115
+ self.screen.blit(self.Color_ball_surface,self.brush)
116
+
117
+ if(Graphic.Button_state["Color"]=="Eraser"):
118
+ self.screen.blit(self.black_mask,(0,0))
119
+ Graphic.Button_state["Color"]="White"
120
+ Graphic.x_y_of_number.clear()
121
+ Graphic.data.clear()
122
+
123
+ elif(Graphic.Button_state["Color"]=="White"):
124
+ pygame.draw.circle(self.Color_ball_surface, (255,255,255), (self.radius,self.radius), self.radius, self.radius)
125
+
126
+ elif(Graphic.Button_state["Color"]=="Black"):
127
+ pygame.draw.circle(self.Color_ball_surface, (0,0,0), (self.radius,self.radius), self.radius, self.radius)
128
+
129
+ def pygame_to_opencv(self):
130
+
131
+ view_ROI = pygame.surfarray.array3d(self.screen)
132
+ view_ROI = view_ROI.transpose([1, 0, 2]) #convert from (width, height, channel) to (height, width, channel)
133
+ view_ROI=view_ROI[0:466,0:]
134
+
135
+ self.img_bgr = cv2.cvtColor(view_ROI, cv2.COLOR_RGB2BGR)
136
+ self.img_gray= cv2.cvtColor(view_ROI,cv2.COLOR_RGB2GRAY)
137
+
138
+ #cv2.imshow("img_gray",self.img_gray)
139
+
140
+ def hand_writing_detection_using_pictures_CNN(self):
141
+
142
+ contours,hierarchy = cv2.findContours(self.img_gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#_NONE
143
+
144
+ if len(contours)>0:
145
+ #cv2.drawContours(self.img_bgr, contours, -1, (0,255,0), 5)
146
+ # find the biggest countour (c) by the area
147
+ #c = max(contours, key = cv2.contourArea)
148
+ num_rec= 0
149
+ for cnt in contours:
150
+ x,y,w,h = cv2.boundingRect(cnt)
151
+ if (w>28 and h>28):
152
+ num_rec+=1
153
+ #print(num_rec)
154
+ roi= self.img_gray[y:y+h,x:x+w]
155
+ #roi=np.pad(roi, 5, mode='constant', constant_values=0)
156
+ roi=roi/255 #normalization
157
+ #cv2.imshow('ROI',roi)
158
+ gray_small = cv2.resize(roi, (28, 28))
159
+ gray_small = gray_small.reshape(1,28,28,1)
160
+ pred=self.model.predict(gray_small)
161
+ max_pred=np.amax(pred)
162
+ pred_number=np.argmax(pred,axis=1)
163
+
164
+ if(pred_number!=10):# and max_pred>0.90):
165
+ LABEL_COLOR = (0,255,0)
166
+ LABEL_TEXT = str(pred_number)+"="+str(max_pred)
167
+ cv2.rectangle(self.img_bgr,(x,y),(x+w,y+h),(255,0,0),1)
168
+ cv2.putText(self.img_bgr, LABEL_TEXT, (x, y-8), cv2.FONT_HERSHEY_SIMPLEX, 1/2, LABEL_COLOR, 2)
169
+
170
+ def hand_writing_detection_using_pictures_RNN(self):
171
+
172
+ contours,hierarchy = cv2.findContours(self.img_gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#_NONE
173
+
174
+ if len(contours)>0:
175
+ #cv2.drawContours(self.img_bgr, contours, -1, (0,255,0), 5)
176
+ # find the biggest countour (c) by the area
177
+ #c = max(contours, key = cv2.contourArea)
178
+ num_rec= 0
179
+ for cnt in contours:
180
+ x,y,w,h = cv2.boundingRect(cnt)
181
+ if (w>28 and h>28):
182
+ num_rec+=1
183
+ #print(num_rec)
184
+ roi= self.img_gray[y:y+h,x:x+w]
185
+ #roi=np.pad(roi, 5, mode='constant', constant_values=0)
186
+ roi=roi/255 #normalization
187
+ #cv2.imshow('ROI',roi)
188
+ gray_small = cv2.resize(roi, (28, 28))
189
+ gray_small=np.expand_dims(gray_small, axis=0)
190
+ pred=self.model.predict(gray_small)
191
+ max_pred=np.amax(pred)
192
+ pred_number=np.argmax(pred,axis=1)
193
+
194
+ if(pred_number!=10):#and max_pred>0.90):
195
+ LABEL_COLOR = (0,255,0)
196
+ LABEL_TEXT = str(pred_number)+"="+str(max_pred)
197
+ cv2.rectangle(self.img_bgr,(x,y),(x+w,y+h),(255,0,0),1)
198
+ cv2.putText(self.img_bgr, LABEL_TEXT, (x, y-8), cv2.FONT_HERSHEY_SIMPLEX, 1/2, LABEL_COLOR, 2)
199
+
200
+ def get_hand_writing_coordinates(self):
201
+
202
+ if(self.brush):
203
+ if(self.brush[1]<466):
204
+ if(Graphic.x_y_of_number):
205
+ if(Graphic.x_y_of_number[-1]!=self.brush):
206
+ self.Hold=True
207
+ Graphic.x_y_of_number.append(self.brush)
208
+ else:
209
+ Graphic.x_y_of_number.append(self.brush)
210
+ else:
211
+ if(self.Hold==True):
212
+ self.Hold=False
213
+ Graphic.data.append(Graphic.x_y_of_number)
214
+ Graphic.x_y_of_number=[]
215
+
216
+ #print(len(Graphic.data),Graphic.x_y_of_number)
217
+
218
+ def flatten(t):
219
+ return [item for sublist in t for item in sublist]
220
+
221
+ def save(self):
222
+ if(Graphic.Button_state["Color"]=="Save"):
223
+ #print(Graphic.data)
224
+ #print(Graphic.flatten(Graphic.data))
225
+ np.savez("dataset/normal_data"+str(time.time()),np.array(Graphic.data,dtype=object))
226
+ np.savez("dataset/flatten_data"+str(time.time()),np.array(Graphic.flatten(Graphic.data),dtype=object))
227
+ Graphic.Button_state["Color"]="Eraser"
228
+
229
+ def Balls_pos():
230
+
231
+ Ball_pos = {
232
+ "White":(332,500),
233
+ "Black":(313,500),
234
+ "Eraser":(352,500),
235
+ "Save":(232,490)
236
+ }
237
+ return Ball_pos
238
+
239
+ class Main:
240
+
241
+ def __init__(self):
242
+ Graphic.__init__(self)
243
+
244
+ def run(self):
245
+ x=0
246
+ y=0
247
+ c=1
248
+ #n=0
249
+
250
+ while True:
251
+
252
+ self.screen.blit(self.image, (0, 466)) #clean_screen
253
+
254
+ #pos=pygame.mouse.get_pos()
255
+ keyState = pygame.key.get_pressed()
256
+
257
+ Graphic.mouse_rectangle(self)
258
+ Graphic.Buttons_check(self)
259
+ Graphic.draw(self)
260
+ Graphic.pygame_to_opencv(self)
261
+ Graphic.get_hand_writing_coordinates(self)
262
+ Graphic.save(self)
263
+
264
+ # if (keyState[pygame.K_r]): #press R to detect
265
+ # Graphic.hand_writing_detection_using_coordinates(self)
266
+
267
+ if (keyState[pygame.K_c]): #press C to detect
268
+ Graphic.hand_writing_detection_using_pictures_CNN(self)
269
+ #Graphic.hand_writing_detection_using_pictures_RNN(self)
270
+
271
+ if (keyState[pygame.K_ESCAPE] or cv2.waitKey(1) & 0xFF == ord('q')):
272
+ pygame.quit()
273
+ break
274
+ #quit()
275
+
276
+ # if (keyState[pygame.K_RIGHT]):
277
+ # x+=1
278
+ # if (keyState[pygame.K_LEFT]):
279
+ # x-=1
280
+ # if (keyState[pygame.K_UP]):
281
+ # y-=1
282
+ # if (keyState[pygame.K_DOWN]):
283
+ # y+=1
284
+ # self.screen.blit(self.ball_surface,(x,y))
285
+ # print((x,y))
286
+
287
+ #self.img_bgr = cv2.resize(self.img_bgr, (480, 270))
288
+ cv2.imshow("out_put",self.img_bgr)
289
+ milliseconds=self.clock.tick(30) # fps=30
290
+ pygame.display.flip()
291
+
292
+ # Execute:
293
+ Main().run()
294
+ cv2.destroyAllWindows()
data/CTC.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fdf1f24ce52e8410807b4e71bf0e7896fae270ef1f70ebbaf193ec90a4ab2651
3
+ size 1551038
data/CTC_Loss_Commands.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:79aec3525ff0508e875649dba2379e01742ed301fc2fcacd8ef54711ebddb974
3
+ size 333724
data/CTC_Loss_Example_yes_no_rec.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/CTC_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ اگه قطع شدم بهم اطلاع بدید خب سلام به نام خدا دوستان عزیز ارجمند عرض سلام و ادب خیلی خوش آمدید ما امروز در خدمتتون هستیم با مطلبی تحت عنوان سیتی سیلاس یا کانکشنیست تمپرال کلسیفیکیشن که صحبت میکنیم در مورد چیه و مجدداً برگشتیم به مباحث هوشمند مصنوعی مون و انشالله تو جلسات آتی یه سری مباحثی که اسمش برای خودمون میزاریم مباحث پیشرفته تر مطرح میکنیم و از اینجا به بعدش ممکنه هر چیزی به درد همتون نخوره و بعضیاتون از بعضی از این مواردی که عرض کردیم خدمتتون استفاده بکنید یکی از اون چیزهایی که میتونه به کارتون بیاد سیتی سیلاسه که خدمتتون بیان میکنم کجا کاربرد داره به این اسلاید از آرنن ها من مراجعه میکنم دوباره ما قبلا
2
+
3
+ واریانت‌های مختلف آرنا را بررسی کردیم وان تو وان رو داشتیم که گفتیم مثل یه شبکه عصبی ام ال پی ساده خودمونه وان تو منی داشتیم و مثال زدیم براتون که کجا کاربرد داره مثلاً یه عکس بهش میدید که توصیف کنید عکس چیه ها شما یه دونه ورودی دادید ولی اون باید برای شما یه سیکونس تولید کنه منی تو وان داشتیم که مثلاً فرض کنید که یه سوال میپرسید طرف باید با بله یا خیر جواب بده یه فیلم بهش نشون میدید باید بهتون فقط یک کار بگه این داره تو فیلم چه اتفاقی میفته مثلا یه کلاسیفیکیشن انجام بده و این منی تو وانن که اگه یادتون باشه خروجی ما تو آخرین در واقع لایه هیدن سبزه داره تولید میشه درسته یه سری منی تو من های داشتیم یه دونه مونده به سمت راست رو نگاه بفرمایید از اونایی که به ازای هر ورودی یک دونه خروجی تولید میشه و یه سری هم منی تو من های از جنس های
4
+
5
+ براتون صحبت کردیم که اول ما یه سری ورودی میدیم میریم تا یه جایی از اونجا به بعد شروع می‌کنیم خروجی تولید کردن و یه گروه دیگه‌ای باقی موند به نام منی تو منی‌هایی که خروجی هاش هیچ کدوم از اونا نبودن و نظم قبلی‌ها رو ندارن یعنی اینکه از یه جایی به بعد شروع شن و تا آخر باشن یا از اول باشن و تا آخر باشن و می‌تونه کاملاً شلخته رخ بده یعنی هر از گاهی یه خروجی بخواد تولید شه می‌خوایم امروز در مورد این صحبت کنیم که چگونه اینو با آرنا هندل کنیم خب و مثلاً اگه بخوایم باهاش مواجه بشیم شبکه عصبی آ یا چیزی که توسعه دادیم چگونه باید وزنش آپدیت بشن لاس رو چجوری میشه تعریف کرد ولی آخر و کاملا کیفی صحبت می‌کنیم و نحوه پیاده سازیش هم توی حالا کرا و همینطور پایتورچ آقای مهندس رنجبر میان خدمتتون با یه مثالی بیان می‌کنن اما در مورد کاربرد این صحبت کنیم کاربرد این
6
+
7
+ کجاست و چه ویژگی بارزی داره ویژگی بارزش اینه که اینا اوردر سینکرونوس هستند ولی تایم سینکرونوس نیستند خب یعنی اینکه ترتیب چیزی که می‌خوان تولید کنند با ترتیب ورودی شما سازگاره ولی به ازای هر فریم توی ورودی شما اونا یک فریم تو خروجی معادل تولید نمی‌کنن مثلاً فرض کنید صحبت کردن منه من دارم صحبت می‌کنم و می‌خواید شما کنید من چی گفتم و جمله مو بیان کنید مثلا من میگم سلام اگه تو اور تک حرف و فون و اینا بخواید آوان مراجعه کنید میگید صبح سلام اینجوریه که اول گفته میشه لا بع درسته و من باید تلاش بکنم که پیدا بکنم که کجا تا کجا سر کجا تا کجا لایو کجا تا کجا تنهاست و البته اگه ویس هم مثلاً سلام من مثلاً ۱۰۰ فریم ۵۰ فریم طول بکشه دلیل نداره که ۵۰
8
+
9
+ سومش به پنجاه سومش به لا و اینجوری بگذره درسته دیگه کجا می‌تونه کاربرد داشته باشه ع��ض به حضور شما اینکه شما یه مجموعه حرکت‌هایی انجام دادید خب و می‌خواید چیکار کنید وقت ندارید یا هزینه یعنی براتون سخته از منظر هزینه ای که بخواهید جدا جدا ببرید تو اردر فریم و ثانیه که مثلاً این حرکته مثلاً از اینجا تا دو و نیم ثانیه اولش فلان بوده و الی آخر مثلاً یه کاری کردید یکی دویده دور زده پریده خوابیده بلند شده دویده همچین چیزیو دارید ولی کل حرکت مثلا فرض کنید تو۰ فریم رخ داده یا ۱۰۰ فریم رخ داده و شما اینو دارید می‌دونید جمله چیه ولی نمیدونید کجا تا کجاشه طبیعتاً توی در واقع اوردر رو بیارید بالاتر از اون سلام بیاید جلوتر مثلاً جمله‌بندی مثلاً سلام من علیرضا هستم من کلششو به یه شبکه بدم ولی دیگه جدا جدا نکنم از کجا تا کجا سلام
10
+
11
+ از کجا تا کجا من بود و اینو بخوام واگذار کنم به خودش یه جوری تلاش بکنه اون یه کاری برای من بکنه دیگه توی چه سیستم‌هایی می‌تونه کاربرد داشته باشه توی شناسایی‌های دستخط وقتی یه چیزیو نوشتید با دست خط به خصوص وقتی که زنجیره‌ای و اینا می‌نویسید مثلاً شما جداگانه نیومدید مثلا اس و ال رو کنار هم اس و سی رو کنار هم الی آخر بدید ولی مجموعه از کلماتی دارید که الگوهای مختلفی توشه خب مثلاً ساینس رو دادید که اس و سی اولن بعد یه آی میاد بعد مثلا ممکنه زنجیره‌ای هم نوشته باشه بوک دادید و و الی آخر و بعدا یک کلمه بهش میدید که اصلاً ندیده تا الان و بهش میگید برام بنویس چی بود خب من نوشته‌ای آوردم تو برام تایپش کن در حد حرف به حرف بهم بگو این چیه و اون باید بره پیدا کنه که بگه خب من اونا رو تو ترینینگم دیدم الگو دیدم دیگه اس تنها رو ندیدم سی تنها رو ندیدم ساینس رو با هم دیدمکو دیدم علیو دیدم کار دیدم کت دیدم و و و
12
+
13
+ چیکار کنم پیدا بکنم اینا کاربرداییه که این مسائل منی تو منی حالا خروج شلخته داره خب یه پرانتزی باز بکنم وارد بحثمون بشیم تو این منی تووانا نگاه بکنید ما تا الان عرض به حضور شما که حالا موسم قفل کرده بخاطر اینکه اجازه بدید ببینم فعلا که قفل عرض به حضور شما که این منی تو وان ها خدمتتون عارضم که اینجوری بود که فقط به ازای آخری به آخری فقط خروجی تولید میکرد درسته یه پرانتزی باز بکنم چون اینجا به دردم میخوره بعضی از کسایی که با منی تو وان ها کار میکن میان چیکار میکنن میان میگن فرض کن تمام سبزها اومدن خروجی تولید کردن نه فقط اون آخری
14
+
15
+ تولید کرده ولی به سبزهای قبلی هم خروجی از جنس اون آخریه تولید کرده مثلاً اگه کلاسیفیکیشن بوده و تهش می‌خواسته بگه تو این فیلم داشتید می‌دوید همه این آبی‌هایی که تولید میشن همه چی باشن بخوان دویدن بازنمایی کنن خب دیگه خیلی هم بخوایم بگیم نه اون آخریه خیلی مهمتره زمانی که تو لاس بیاریم مثلاً وقتی که لاس نهایی رو میگیم لاس اول باید لاس دوم به علاوه سوم بگیم یه دبلیو برابر دوم چیکار کنیم شروع کنیم کمتر کردن خب ولی قبول دارید که میشد من تمام سبزها رو براش باز دوباره خروجی آبی تولید کنم از جنس منی تو منی های بشه که چی به ازای تک ورودی تک خروجی هم تولید میکنه قبوله یا نه حالا می‌خوام از این ایده اینجا استفاده کنم و بعد وارد بحثمون بشم بچه‌ها بحثی که ما داریم اول ایده رو ببینید همین قدر که عرض کردم خدمتتون این لزوماً به درد همه شما تو چیز نمیخوره و
16
+
17
+ بعضیاتون ممکنه اصلاً استفاده هم نداشته باشید از این رنگ‌های خود چیزم استفاده کنم رنگ‌های عمومی قرمز سبز آبی ��اشه ورودی‌ها رو اجازه بفرمایید قرمز بدم بعد چیزا رو سبز میدیم لایه هیدن و سبز میدیم و لایه‌های خروجی هم آبی میدم خب فرض کنید در عادی اینجا قرار بوده تولید شه اینجا قرار بوده تولید شه و اینجا خب برای اینکه اینو به یک مسئله منظم تری تبدیلش کنم با اون ایده استفاده میکنم میگم آقا فرض کنید مثلاً قرار بوده من یه ویس بهش دادم و توش گفتم سلام به سه لا و می‌خوام بشکونم
18
+
19
+ اینجا تولید کرده باشه که انتهای بوده یا اینجا بوده من قبول دارید می‌تونم با همون الگوئه بگم این دوتا قبلیش هم بهش میگم اینم جز سه بوده قبوله این کلاً این پکیج با هم اولیه بوده توکن اول بوده این دو تا با هم لا مثلاً بوده و این دوت آخری با هم چی بوده بوده یه همچین چیزی خب اینو که قبول داریم که من بعداً بتونم لاسی رو که تشکیل میدم چی باشه لاس که تشکیل میدم یه چیز منظم‌تر حالا از جنس های منی تو منی قدیمی باشه که خیلی مشکلی بر نخوره خب حالا فرض کنید که می‌خوام چیکار کنم می‌خوام که کارمو انجام بدم خب ماجرا اینه که مسئله رو اینجوری میشکونمش بعد وارد بحثش میشیم و چون یه جاهایی شما بک گراند ندارید فقط در حد به معرفی می‌گذره و عرض به حضور شما اگه خودتون خواستید چیکار می‌کنید بعداً مطالعه می‌کنید و شاید بیشتر از اینکه تئوری پشتش چیه اینکه بتونید
20
+
21
+ علی پیادش کنید براتون مسئله مهم‌تری خواهد بود چون هیچ کدومتون سی تی سیلاسو خودتون کد نخواهید زد که لاستشو بنویسید و از یکی از این فریم‌ورک‌ها آماده مثل مثلاً کراس سنسور فلو پایتور استفاده می‌کنید که همشون توش لاس‌هایی از جنس سی تی سی تعریف شده و ازش استفاده می‌کنیم با توابع مناسب خب ماجرا اینه که فرض کنید من در حد یه سری جمله می‌خوام بدم به چیز به اصطلاح ویس صدا بدم به ورودی توش یه سری جملات بیان میکنم و تو خروجی انتظار دارم تک تک کلمه هایی که اجرا کردمو چیکار کنه برام تایپ کنه مثلا جمله اولم هست مثلاً من علی را دیدم این صوت اوله به عنوان ورودی بهش میدم و این انتظار رو دارم این جداگانه تو خروجی متن من علی را دیدم و تولید کنه برام ها از اونایی که نمیدونم از کجا تا کجاش من بوده از کجا تا کجاش علی بوده یه
22
+
23
+ من و حسن به کوه رفتیم دوباره خب یه من دیگه باز توش وجود داشت این دفعه حسنی وجود داشت تو قبلی نبود و و حالا تصور کنید هزاران جمله برای ترینینگ دارید که کل دیتا ستتون رو پوشش میده و الی آخر و فرض کنید که چیه کلمات شما تو دیکشنری مثلاً تعدادش مثلاً ۱۰۰ تاست خب من علی تبدیل کن مثلاً این الان کارمون اینه خب من فقط یه پرانتزی هم باز کنم صوت هم برای اینکه به مطلب تبدیل کنیم قبلا در مورد این بهتون گفتم بالا اسپکتروگرم اینه که صوت یه عکس تبدیل میکنه یه محور محور زمان یه محور محور فرکانسسه و بهتون میگه تو هر زمان چه طیف فرکانس های با چه شدتی حضور دارن یه چیز رنگی بهتون میده جان دو بعدی رنگ شدت حالا شدت بگید من رنگ منظورم چیزه منظورم اون شدتشه میتونه سیاه و سفید نشونش بده خب ببینید اسپکتور
24
+
25
+ یک محور فرکانس یک محور زمان یه صوت کامل تو هر زمان تو هر فرکانس اون شدت رو با یه عدد نشون میدم آره یه همچین چیزی می‌شه مثلاً اسپکت رو گرم بزنم اینا مطلب داره همه چی دارن خب اینا چیزایی از این جنسن اون بالا بالا شکل بالایی که دارید میبینید صوت بر حسب زمانه اون آبیه ولی پایینیه که رنگی رنگی براتون کشیده یا اون سمت راستیه این چیه این عرض به حضور شما که اسپکتوروگرمشه که زمان فرکانس اومده حالا شدت یه چیزی رو تو زمان فرکانس های مختلف نشونتون داده و شما اینو به عنوان ورودی چیکار میکنید میتونید به شبکه های آرنت تو بدید خب آره اکثر بالا پایینی دیگه بالایی که آبیه که خودش بر حسب زمانه شما اول به عکس
26
+
27
+ عکس فیک اون عکسه رو میدید به عنوان ورودی باز شدت حضور یک فرکانس توی یک زمان خاص مثلا میگن که این فرکانس با چه شدتی حضور داره تو اف تی میگیره حالا خیلی فصل ترنسپورت میگیرن تا جایی که میدونم با اون شدت که حالا خودش عددی که به دست میاره یه عدد مختلطه ولی ابسلوتش میگیرن حالا اگه لازم باشه یه سری تغییراتی روش میدن کلمه صدا تن صدا یعنی چی تن هر فرد رو تشخیص بده احتمالا شما میتونید برید دیدگاه دیگه به اون برسید حالا من کار نکردم بلد نیستم ولی منطقا میشه رسید منط
28
+
29
+ قبلش میزنم یعنی یه صوت که میاد قبل از اینکه صوت به ورودی بدم اول این عکس را تولید میکنم عکس رو لایه لایه فرض کنید میدم به چیز آره این عکس رو میخوام به متن تبدیل با هر دقتی تخمین بزنند ولی ممکنه یک به حجم خیلی خیلی زیادی دیتا نیاز داشته باشن و تعداد نیرون هاشون خیلی خیلی زیاد باشه حتی ام پی ثابت شده که میتون اثبات ولی کس که کارهای چیز میکن نداریم که بگیم امکان نه نه نیست دیگه دلیلش اینه که من براتون اون سری هم ثابت کردم ما مسائل رو به سه دسته مسائل بین مسائل کلاسسیفیکیشن و مسائل رگریشن شکوندیم ما اون مسائل رو با هر دقتی
30
+
31
+ خیلی زیاد ممکنه اکسپوننشیالی تعدادش زیاد بشه میشه هر تابعی در عالم شناسایی زیاد دارن مثلاً چند چند میلیارد یا چند صد میلیارد یا چند هزار میلیارد پارامتر دارند و این سبب میشه که توابع فوق فوق پیچیده‌ای رو بتونن مدل فکر نمیکنم کار میکن تو کره کار میکنن و حدس میزنن که اینا اثبات میکن که میشود خب یعنی یا شرایط لازم و کافیش هم حتی ممکنه بگن که حداقل مثلا چقدر داده بخواهیم مثلا ثابت میشه این اتفاق میفته خب ماجرا اینه که بچه‌ها اسپکتور هم که این چجوری به دست میاد و اینا اصلا باز اگر حتی الان نمیدونید چیه یه چیز مهمی نیست چون دستورات آماده وجود داره تو در واقع مطلب پایتون و الی آخر که بزنید براتون بکشه
32
+
33
+ یعنی در این حده که میاد براتون حوزه زمان و فرکانسو در واقع تشخیص میده تو عکس‌ها شدتشو می‌گیره و الی آخر خب حالا فرض کنید ما یه عکس داریم که معادل عکس من علی را دیدم بوده و اون باید بیاد توکن‌های من علی را دیدم و برام تولید کنه بچه‌ها اینجا با باشید چون برام مهمه فرض کنید که دیتا ستی که من دارم ۱۰۰ تا کلمه داره مثلا فرض کنید که چه میدونم این حالا همینجوری به ذهنم خورد مثلاً این سیستم های ورودی پارکینگ هستن که عکس میگیرن از عکس چیز ماشین خودروی ماشین بعد بالا می‌نویسه ماشین فلان وارد شده خارج شد اون الان عکس گرفته به نوشته تبدیل کرده دیگه به تک تک توکن هاشو شکونده و اینجوریه که خب یه حدی داره دیگه مثلاً من الان ادعا کردم که فرض کنید دیتا چیز دایره لغات من صد تا کلمه داره و از این دیگه تخطی نمیکنه خب این ۱۰۰ تا رو دارم ولی جمله من علی را دیدم چیه مثلاً چند تا از اینا رو داره چهار تاشو داره از این ۱۰۰ تا این من علی
34
+
35
+ عادی می‌افته اینه که چی شما اینو قرمزها رو ورودی می‌دید سبز میره یه هیدن حساب میشه و میره به آبی میده آبیه باید چند تایی می‌بود اگه مثلاً منی تو وان بود که بعدش من کلاسیفیکیشن کنم ب��م چیه باید ۱۰۰ تایی می‌بود باید ۱۰۰ تایی بود که من برم اعتماد بگیرم یا گیریدی نگاه کنم و بدترینش بالاترینشو انتخاب کنم بگم منه دیگه الانم فرض کنید که این اتفاق میفته یعنی آبی و صورتی های که من کشیدم یه چیز ۱۰۰ تایی تولید کردن که از جنس احتمال و سافت مکس زدم جمعشون یک میشه و هرچی بالاتر باشن احتمالشو داره بالاتر میبینه و الی آخر خب برای اینکه با ctc کار بکنید اولین کار جنبی که انجام میدید اینه که تو فرایند ما ترینینگ رو تستمون یه تفاوت های داره تو ترینینگ اون من میدونم جوابش هست من علی را دیدم میام سطر من
36
+
37
+ علی را و دیدمشو فقط جدا می‌کند اون چهار تا رو می‌کشم بیرون حالا یه لایه جدیدی به وجود میارم از چه رنگی استفاده نکردم مثلاً نارنجی خب یه لایه‌ای به وجود میارم که این دفعه فقط چی داره چهار تا داره و احتمال‌های تولید شده مربوط به جمله ترینینگمو میارم بالا به ازای هر ورودی بچه‌ها من خروجی حتماً دارم با این حقه‌ای که زدم که پرش کردم فضا رو درسته و حتما هم تعداد چند تا شد به تعداد توکن های موجود در جمله ترینینگم شد برای ترینینگ بعدی پنج تایی شد نارنجیم پنج تایی میشه خب حالا اینجا چی شده حالا اومدم احتمالات نه نه فقط میکشید بیرون هیچی در هیچ چیز ضرب نمیک من برداشتم از خوندن تئوری اینه که در هیچ چیز اما عین میکشینش بیرون دوباره هم سافت مک روش نمیزنید سابک زده شده قبلا فقط شما عددشو میکشید بیرون همین حالا میخویم
38
+
39
+ بعداً یه لاسی تعریف کنم که بره ببینه این خوبه یا نه اون چهار تا عدده خوب در اومدن یا نه که خوب نیستند از اون طریق گرادیان رو اعمال کنه و w های چیزمو آپدیت کنه اول شده ممکنه خیلی بدی باشن درسته و حالا میخوام اینو ببرم جلو حالا احتمال اینا همه عددا از جنس احتمالا دیگه بین صفر تا یکی توی مثلاً معادله من هم توی چیز اول فریم اول هم تو فریم دوم تا تو فریم آخر وجود داره قبول دارید یا نه یعنی من الان یه جدول مثلاً اگه ۱۰ فریم داشته باشم ده در چهار نارنجی رنگ دارن اینو قبول دارید عالی خب این جایی بود که باید بهش میرسیدم من یه ۱۰ در چهار نارنجی جدا کردم حالا می‌خوام بیام رو سیتی سی صحبت کنم که اصلاً این چیه و باید چیکارش کنیم این ۱۰ در چهار رو و چجوری یه چیزی تعریف بکنم یه لاسی تعریف بکنم که
40
+
41
+ بر اساس این ده در چاره بیاد وزن‌های شبکه‌مون که تو بخش‌های قرمز و سبز و آبی بوده رو اعمال بکنه و انشالله منو به جای خوبی برسونه تعداد ستون‌های عکس مثلاً می‌تونه اون باشه اگر عکس تو یکی یکی ستون ستون بهش بدیم اگه دو ستون دو ستون دو ستون یعنی اومدی دو ستون دو ستون جدا کردی ولی دو ستونش زیر هم بردار کردی خب یه جور دیگه یه معنی دیگه میده درسته یه همچین چیزی اون در ساده ترین حالت فرض کن اکثر ستون ستون دادم بهش ورودی خب به یه جدول نارنجی مثلا چهار در تعداد فریم می‌رسم که اینا اعدادی که توش پر شده بین صفر تا یک اند درسته اگر فرض کنید ما تو نقطه خوب ماجراییم یعنی فرض کنید وزننا به اندازه کافی تو وزن شبکه خوب ترین شدن انتظارمون اینه که چه اتفاقی بیفته نه عدد نگاه این گوشه بالا سمت چپیه بین این چهار تا کدومش بالاتر باشه اون بالاتری
42
+
43
+ منه بیشتر باشه یکی میرم جلوتر یا باید من باشم یا علی باشه نره را یا دیدم و پررنگ کنه با دوباره میرم سومی یا دوباره باید من باشم یا علی احسنت و یه اتفاقی که میفته یه الگوی این مدلی طوری مثلاً دربیاره فرض کنید بره پیدا کنه که مثلاً اولی و دومی من خیلی توش پررنگ بود سومی علی چهارمی تا هشتمی مثلاً راه و آخریش دهمی دیدم الان یه الگوی مجاز هست یا نیست ممکنه چیز باشه نه علی نه آها اگه اینو پیدا کنه تو ترینینگ که اولش که متداوله اون اشتباه میکنه و اصلا ممکنه تو شروع کنی اصلاً من بالا نباشه یعنی یه چیز دیگه بالاتر باشه و شما با لاس هی گرادیان میگیری هی میری آپدیت میکنی به این نقطه میرسه که چی این باید بیاد اصلاحش کنه تهش ولی باید شما رو به اون جمله من علی را دیدم برسونه یعنی الگو اگه خوب ترین شده باشه
44
+
45
+ کجا داریم استفاده میکنیم حالا آقای رنجبر میاد براتون توضیح میده توی ترجمه جمله زبان اشاره فرض کنید که یه اخبار ناشنوایان طرف میاد یه جمله رو اجرا میکنه من میدونم جمله این بود که همین مثلا رئیس جمهور به فلان کشور سفر کرد خب ولی نمیدونم از کجا تا کجا رئیس جمهور بود و خیلی هم شاید برام نیار که بیام ببرم در سطح لغت لغت ولی هزاران تا از این جملات بهش میدن که مثلا رئیس جمهور رو تو ۱۰۰ تا ۲۰۰ تا جمله ببین حالا یه جا اول جمله یا وسط جمله ولی خودش بره پیدا کنه ببینه چی بود و این برام بیاد چیکار کنه پیدا کنه از این منظر به اینجور مسائل میگن ویک سوپروایز خب یعنی اینکه نه اصلا آن سوپروایز کامله نه کاملا سوپروایزه یه چیزی بینابین یعنی من جمله من علی را دیدم بهش گفتم ولی بهش نگفتم از کجا تا کجا من و فلانه خب حالا چیکار باید بکنیم بچه‌ها اینجا دیگه یه سری موارد
46
+
47
+ در واقع حاشیه‌ای پیش میاد که من اجازه بدید رو مثال برم جلو خب و بعضیاشون ممکنه نیاز به بک گراند داشته باشه متوجه نشید و اگه نشدید هیچ ایراد نداره بهتون میگم از کجا برید مطالعه اول گذاشتم یعنی من اول گذاشتمش الان ولی بعدا که میخوام چیزشو آپدیت کنم رند لاس به اون آپدیت کنم میرم تو ستون های آبی صورتیه که جای علی واقعا پنجاهمیه آپدیت میشه آره ولی من به قول شما الان تو نارنجیم منو بالا گذاشتن چون چرا چون میخواستم این الگوی رخ بده یعنی الگوی ولیدی که از بالا گوشه سمت چپ شروع کنم به پایین سمت راست تمام بشه درسته بفرمایید تعریف نه نیست ممکنه تعداد فریمتون چیز نباشه
48
+
49
+ مثال خودش زده گفته فرض کنید من کلمه بیفی رو میخواستم شناسایی کنم یعنی یه صوتی بوده توش گفتم بیفی و تو در حد فونیم مثلا آوای ب ای ف و ای رو باید برام پیدا می‌کرده عمداً هم تکراری هم داده یعنی مثلاً من می‌تونستم اینجوری بنویسم من علی را در کنار دوست علی دیدم یعنی عمدا دوتا علی توش بندازم این عمدا ای توش باشه خب گفته چیکار کنید همون حرف ما رو زده گفته یه شبکه دارید ورودی دارید قرمزه هیدنش رفته سبزه حساب شده رفته چی حساب کرده به ازای تعداد تمام کلمات دیکشنریتون یه خروجی حساب کرده شما دستی بیاید چی فقط بی فیش بکشید بیرون تا جدول نارنجی ما رو به وجود بیارید و در ضمن نباید بگید چون بیفی دو تا ی داره من یک بار میکشم نه دقیقا چون برام مهمه که این توکن شناسایی بشه باید به همون تعد
50
+
51
+ فاصله انداخته اگه پشت سر هم بود چی مثلا فرض کن هلو می‌خوام اینو شناسایی کنه حالا اینم بهتون میگم چیکار کنیم فعلاً اینو گوشه ذهنتون بزارید آخرش یه تریک ساده است که توی حالا پیاده سازی هم بهتون میگیم خب کاری که کرده اینه که چی کاری که کرده اومده احتمالاتی که از شبکه پیدا کرده رو عیناً تو اون جدول بالایی که ما جدول نارنجی مون شد کپی کرده تا اینجا قبوله یا نه س��ال در حد کلمه تشخیص بله در اینجا در حد آوا بوده من ممکنه آره دیگه الان کار که یوتیوب هست زیرنویس چیز بهتون میده آنلاین بهتون چیکار داره میکنه صوت داره میگیره در حد آوا یا در حد مثلا کلمه بهتون خروجی میده همه اینا شدنیه شما میتونید توکنتون چیه در حد آوا در حد کلمه دو تا من سه تا علی
52
+
53
+ در واقع فرایند اسپکتور ستون اول من بوده از لحاظ زمانی معادل من هست چون من صوت من نگاه کن صوت من نه صوت من محور تیه دیگه صوت که ضبط میکنم بالاخره من وقتی میگم من علی را یعنی من اول منو میگم بعد علی رو میگم حالا به شبکه دارم میگم ببین تو برو پیدا کن دیگه خودت برو پیدا کن کجا من بوده زمانم مطرحه دیگه بله اصلا کلمه این سیتی مخفف چی بود کانکست تمرال کلاسیفیکیشن تمپرال معنی زمانی داره همون زمان چیز هم ترتیب اردر سینکرون دقیق یعنی رعایت میشه ولی فریم به فریم رعایت نمیشه اگه صوت شما ۱۰۰ فریم داشته باشه اینجوری نیست که از فریم یک باید یک یک آوا فریم دو یک آوا تولید شه ممکنه یه آوا به هر دلیلی سه فریم طول بکشه آره دیگه ارد
54
+
55
+ بلوک‌های صورتی رو اضافه کردن نه دیگه دوتاشون یکیه الان اون عددی که توی چیز پیدا شده تون برای ای دوبار کپیش میکنید هم تو سطر دوم هم تو سطر چهارم تو لحظه اول خب همون عین همونو گذاشته خب یه همچین چیزی نوشته نوشته وای صف الی آخر خب اوکی حالا می‌خواید اینو برید چیکار کنید یه یه کمک کنید به لاس فانکشن خب که قبلا هم تازه خودمون نزدیم که اینکه بیاد این مسیره رو بره پیدا کنه بچه‌ها چندین راه اینجا وجود داره ما پارسال باید سال توی درسمون چهار پنج جلسه در مورد موضوعی به نام هیدن مارک گفت مدل یا صحبت کردیم که ورژن های غیر دیپ و قدیمی آرن بودن یعنی
56
+
57
+ اونجا توش تو اونجا یه سری مفاهیم گفتیم که اگه دلتون میخواد با جزئیات بدونید یا این اسلایدها رو با جزئیات ترک کنید باید برید اون فیلم‌ها رو ببینید که اگه خواستید من لینکاشو در اختیارتون قرار میدم ولی شاید نیارزه براتون الان لااقل توی بحبوحه مثلاً امتحانات و اینا و تو اونجا در مورد یه سری مباحث صحبت کردیم یکیش مثلاً موضوعی بود به نام روش ویتربی این کلمه رو به خاطر داشته باشید یا یکیش در مورد الگوریتم فوروارد بکوارد یا الگوریتم فوروارد الگوریتم جلو رو و عقب رو اینا اصطلاحاتی که من اونجا صحبت کردم اگه دلتون میخواد برید بپرسید بدید بخونید خب من باید در حد نیازتون الان بهتون میگم که انشالله بعدش بریم پیاده‌سازی عملیش ببینیم خب عرض به حضور شما اینکه تو روش ویتربی اتفاقی که میفته اینه که میگه ببین تو این ماتریس نارنجیه بالا رو داری خب میگه برو نگاه کن که چه مسیرهای مجازی وجود
58
+
59
+ از ب شروع بشن به ای آخر ختم شه درسته مثلاً فرض کنید که سه تای اول ب باشه چهارمی و پنجمی ای باشه ششمی اف باشه بقیه اش ای آخر باشه این یه راه دوتای اول بی باشه ای بعداً مثلاً سه تا بعدی یکی بعدیش فلان درسته همه حالت‌ها مجاز خیلی حالت خیلی حالت با یه الگویی به نام داینامیک پروگرمینگ میاد لایه لایه میره جلو میگه که خب من اگه بخوام همه حالت ها رو مستقل از هم فرض کنم کار طولانی میشه لایه لایه میره جلو و میگه برو احتمال مسیرهای مجاز رو برام پیدا کن مثلا فرض کنید هزار تا مسیر مجازه میره تمام اون هزار تا احتمالاشو میره محاسبه میکنه خب اگه لازم باشه و ماکسیممش مثلا فرض کن ۵ هزارمه مثلاً ماکسیمم احتمال اینکه یک مسیر از بی به ای ��تم بشه واقعاً تو این اوردرم فکر نکنید مثلا ۲۰ درصد و ۵۰ درصد ایناست مثلاً ۵۰۰۰ خب
60
+
data/CTC_transcript_part2.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ۲۰۰۰ تا مسیر بعدی ۳ هزارمه بعدی مثلاً یک هزارمه بقیه مثلاً چند ده هزارم چند صد هزارم و اینا چیکار کن میگه برو بهترین مسیر با بیشترین احتمال مجاز رو برام سلکت کن خب و اون معیاره و با توجه به اون بیا یه حقه‌ای بزن عرض به حضور شما که یه چیزی تعریف کن به نام لاس فانکشن و طبق اون بیا لاسو آپدیت کن اینا رو میگم شما نیاز نداره که بدونید چیه یعنی با این خیلی متعجب نمیشید پیشنهاد میکنم دلتون خواست اون اسلاید های هیدن مارکو مدل بندر یا فیلمو ببینید خب و بعدش بیاید به این مراجعه بکنید که کدشو این رو زده مثلاً فرض کنید این قرمزه که براتون کشیدم چیه بهترین مسیر مجازه که در واقع از روش ویتربی به وجود اومده بعد میگه اوکی حالا دیگه دارم انگار ویتربی حرفش اینه که چی میگه اگر قرار بوده باشیم تو این ویسی که بهتون دادم بیفیو گفته باشم
2
+
3
+ من میگم که باید دوتا اولش ب باشه بعدیش ای باشه بعدیش ف باشه دو تا بعدیش چهار تا آخرم ای باشه اوکی لاس که تعریف این تعریف کن خب به نظر میاد باید شبکه من به سمتی بره که تو دوت اول تو این صوت ب رو تولید می‌کرد خب تو سومی چیو تولید می‌کرد ای رو تولید میکرد درسته و یه لاسی رو تعریف میکنه و بعدش مشتق هم که میگیره ازش میگه برو با این گرادیان برو چیکار کن وزن های شبکه عصبی آپدیت کن که چی که این شبکه وقتی میاد به اینجا میرسه با این داده چی تولید کنه دو تای اولش ب باشه بعدی ای باشه و الی آخر احتمال ب بره بالا درسته یه همچین کاری میکنه بهش میگن روش ویتر یه اتفاقی که تو روش ویتر بی میفته این که اولا شما بین مث اون هزار تا مسیر میاد یکیشو انتخاب می‌کنید که بیشترین احتمال داره ولی لزومی نداره تو واقعیت اون رخ داده باشه خب و دوم که وقتی که لاس رو میخوید آپدیت کنید
4
+
5
+ جریانش خیلی از درایه‌ها صفرند و یه جایی که فقط غیر صفره و میخواد بره مسیرو مینیموم کنه که این روش اگه استفاده ازش بکنید ممکنه توی مینیمم محلی گیر بیفتید اوکی ها کار ممکنه در بیاره ولی تو واقعیت روش بهتری هم وجود داره که می‌خوایم بهش اشاره بکنیم روش بعدی اسمش اینه که چیکار کنید از تمام ظرفیتتون استفاده کنید خب و اینی که عرض میکنم خدمتتون باز ممکنه غریب باشه نگرانش نباشید خب من اجازه بدید برم به آخر برسم رو آخرش صحبت بکنم که شفاف تر بفهمید چی دارم میگم به یه عکسی برسم به یه عکس خوبی که دلم میخواد خب اوکی میگه که راه بعدی که راه بهتریه و جریان گرادیان را پخش میکنه
6
+
7
+ هموارتر شبکه‌تونو به روز می‌کنه اینه که عرض می‌کنم خدمتتون همچنان میگه جدول نارنجی رو برای خودتون به وجود بیارید خب که هر کدام یه عددایی توشونه یه پارامتری رو میگه تعریف کن به نام پارامتر آلفا آلفا چیه آلفا خودش دو تا اندیس داره خب آلفا دو تا اندیس داره آلفای تی و r خب یعنی دو تا پارامتر با دوتا شاخص شناخته میشه آلفا یه پارامتریه بیانیه است احتمال اینکه در لحظه تیام المان آرام ظاهر شده باشد نمادی از اینه آلفای دو و سه تو مسئله من علی را دیدم یعنی چی یعنی در زمان در فریم شماره دو توکن شماره سه من که اینجا چیه را باشه تولید شده
8
+
9
+ با چه احتمالی اتفاق افتاده خب و منطقاً مثلاً اگه می‌خواست جمله با من شروع بشه باید لحظه آخر که شبکه‌تون به نقطه خوبی رسیده باید احتمال آلفای یک و یک چند باشه یعنی تو فریم اول کلمه اول این نزدیک یک شه سه تای دیگه نزدیک چند شن صفر درسته یه همچین چیزی یا آخری وقت�� که مثلاً با آلفای توی فریم آخر خونه آخری باز باید چند باشه باز باید یک نزدیک بشه بقیه بالاییاش باید به صفر میل کنن درسته آلفا احتمال اینه بچه‌ها از این جدول نارنجیه میشه آلفا رو پیدا کرد با داینامیک پروگرمینگ خب جدولی هم که برای آلفا پیدا می‌کنید دقیقاً هم سایز نارنجی است یعنی اگه اینجا چهار در ده بود اینجا هم یه دونه چهار در ده دارید بهش میگن جدول آلفا خب ولی فقط نمیاد برای اول و آخر بگه هر جایی میگه مثلاً میگه احتمال اینکه در فریم شماره ۵ توکن شماره یک ظاهر شده باشد احتمال اینکه در
10
+
11
+ داینامیک پروگرامینگ حل می‌کنیم عدد داریم که از شبکه تا این لحظه به دست اومده حالا خوب نباشه با این فعلا میریم جلو با لاسن هی بهترش خیلی خیلی تو دیواره اگه وقت کنم نشونتون میدم تو گام اولش یه متن بهش داده کلی دور از جونتون زر زده بعد شبکه فقط تولید این همه حرف زد خب یعنی اینقدر تو دیوار چیز میکنه تولید همه چی دیگه داره بهبود پیدا میکنه آلفا نگاه کن آلفا فقط داره محاسبه میشه ولی چون جدول نارنجیه داره خوب میشه و وزن های شبکه دارن خوب میشن آلفا داره بهتر میشه حالا آلفا خواهید دید که توی فرایند چیز آپدیت گرادیانا ورود پیدا میکنه پس من یه جدولی دارم به نام جدول فوارد خب به این میگن فوارد
12
+
13
+ احتمال اینکه چی در لحظه تیام المان آرون ظاهر شده باشد و در ضمن یه چیزهای اضافه‌تری هم داره مادامی که ورودی اون جمله من علی را دیدم بوده و شما حق داشته باشید فقط از توکن‌های من علی را و دیدن استفاده کنید یعنی جملات تکمیلی بود که دیگه ننوشتم احتمالات شرطی داره خب خب یه جدول تشکیل میدید به نام آلفا که عرض کردم وقتی داینامیک پروگرمینگش میکنن اول ستون اول آلفا را تشکیل میدن بعد هی میرن جلو بچه ستون اول آلفا تو ایده آل چنده یک صفر صفر درسته سطر اول میتونید تا آخر بهم بگید بچه‌ها چنده مثلاً من اگه اینجا مثلاً اینجا احتمال ببخشید اینجا نوشتم یک هم خود چیز میزارم مثلا چهاردهم میزارم حالا یا یک میذاره یه لحظه باید چکش کنم مثلا فرض کنید اینجا چهاردهم بوده مثلاً دو دهم بوده اینجا دو دهم بوده دو دو هشت اینجا میشه دو دهم مثلاً اینجا فرض کنید سه دهم در اومده اینجا یک دهم اینجا یک دهم
14
+
15
+ الی آخر میره جلو خب حالا احتمال اینکه بعدی محاسبه بشه چنده یعنی احتمال اینکه شما تو خونه تو فریم شماره دو توکن شماره یک باشید چنده بچه‌ها فکر می‌کنید از احتمال چی میدونید آره خونه قبلی یه دونه است الان یه دونه خونه قبلی داره چهاردهم بود ضرب در سه دهم میشه چند میشه ۱۲ درسته ۴ ضربدر سه دهم احتمالش ۱۲ صدمه که شما از اون مسیر برید جلو درسته یه همچین چیزی احتمال اینکه شما خونه اول باشید چقدر بود چهار دهم بود احتمال اینکه تو خونه دوم خونه اولش باشید ۴ ۱۲ صدم اگه احتمال اینکه خونه اول تو دومیش باشید الی آخر این میشه حسابش کرد درسته و یه چیزی هم که وجود داره اینه که وقتی
16
+
17
+ به یکی می‌خواید مراجعه کنید تو این مسئله خاصی که ما بهتون مراجعه کردیم دو تا پرنت بیشتر نمی‌تونه داشته باشه یعنی یا دقیقاً از قبلی خودش یا از بالایی خودشه قبوله نمی‌تونسته بره از پایین برداره وگرنه شما ترتیب به هم می‌زدید قبول دارید مثلاً وقتی به نقطه راه رسیدم یا قبلش را بوده یا علی بوده یعنی راه خودش بوده ادامه پیدا میکرد یا علی بوده نمی‌تونسته من یا نمی‌تونسته دیدن باشه حله خب عرض به حضور شما این‌جوری جدول آلفا رو پر میکنه اول ستون اولشو پر می‌کنن بعد سطر اولش پر می‌کنن بعد یه فرم می‌نویسن می‌نویسن حالا به ازای هر کدوم از این خونه ها برو این دو تا خونه رو چک کن و ببین مثلا حالا چجوری چه ویژگی دارن چه این ضرب در اینو براتون نوشتیم اگه دلتون خواست نگاه بفرمایید و این جدول رو تا آخر پر کن جدول آلفا محاسبه میشه که آلفا یک مفهوم فیزیکی داره و احتمال وقوع در واقع توکن آرام توی زمان
18
+
19
+ یه دونه پارامتر دیگه داریم به نام بتای تی و آر بتای تی و آر حرفش شبیه آلفا فقط برعکسی به ماجرا نگاه میکنه میگه احتمال اینکه شما توی مسیری باشید خب که قبلش برام مهم نیست تو لحظه تیام توی المان آروم توکنتون باشه و تا آخر دیگه این جمله من علی را دیدم و اجرا کنید اون چقدره خب برای نگاه میکنه یعنی نگاه میکنه تهش باید به دیدن تمام بشه مثل اینجا میگفتیم با من شروع میشد اونوری یه جورایی نگاه میکنه میگه که از آخر بیای اول مثلاً تو فریم شماره چهار با چه احتمالی شما چیه کلمه را میبینید یه جدول هم داریم که هم سایز باز این جدول نارنجیه و هم سایز جدول آلفاست بهش میگن چی جدول چی بتا که اینم باز تشکیلش میدید با این داینامیک پروگرمینگ باز اینجوری یکی از این نقطه شروع می‌کنید کد زنی اول ستون آخر و
20
+
21
+ آلفا به طور تشکیل دادیم یه پارامتر تعریف میشه به نام گاما میگه حاصل ضرب آلفا ضرب در بتا احتمال اینکه جمله‌تون من علی را دیدم باشه خب تو هر نقطه و گامای تی و آر میگه احتمال اینکه جمله‌تون من علی را دیدم باشه و در حالی که توی فریم تیام و چی مثلا اون چیز آروم مث احتمال وقوع این رایج چند بوده مثلا میتونید یکی یکی اینا رو تشکیل بدید خب مثلاً اینو می‌تونید با گاما حساب بکنید که با چه احتمالی وقتی من علی را دیدم و بهش گفتم تو فریم سوم منو شنیدی تو فریم چهارم را رو دیدی الی آخر یه همچین چیزی این جدول پر میشه پس جدول گاما هم چیه هم سایز چیه جدول آلفا و بتا اون نارنجی است فقط برای اینکه گام
22
+
23
+ از جنس احتمال تو ستون یک نمی‌شه میان تقسیم بر جمع آلفا و بتای اون ستون می‌کنند که چی بشه که جمع اون ستونه یک بشه و مفهوم احتمال به خودش بگیره اوکیه پس گاما رو اینجوری تعریف میکنن حالا این گاما میاد تو چی تو لاس فانکشن ما اینجا براتون نوشته نوشته گاما شده چی آلفا و بتای هر خونه تقسیم چی جمع آلفا در بتای اون ستونه قبوله من یه جدول آلفا دارم یه جدول بتا که هم ارز با اون جدول نارنجی خب و اینو محاسبه می‌کنم می‌گه گاما رو که محاسبه کردید جدولشو چجوری حالا انجام یعنی استفاده کن ازش توی آپدیت کردن پارامترهای چیزمون شبکه ریکنت مون میگه لاس اینجوری تعریف کن بشه سیگما دوگانه روی تی و آر گاما ضرب در لاگ وای تی اس آر خب رو این جمع
24
+
25
+ تمام خونه‌ها یه کانتریبیوشنی تو لاس دارند مثلاً خونه اول بالایی چه جوری وارد میشه گامای ۱۱ شما حساب می‌کنید درسته لوگ وای که تو اون خونه ظاهر شده هم حساب می‌کنید یا خوبه یا بد ظاهر شده اگه خوب باشه که احتمالش یک باشه لوگ چند میشه صفر میشه تو لاست تاثیر نداره میگه خب اوکی وزنه‌های مربوط به من خوبن اگه نه خوب نباشه چی میشه اینجا یه چیزی به وجود میاره که حالا تو مشتقات ظاهر میشه و الی آخر و مشتقشو که بچه‌ها می‌گیرید و بخواید توی در واقع آپدیت کردن برخلاف اون روش ویتر که خیلی صفر داشت یه دونش غیر صفر بود اینجا چی میشه اینجا اینجا دیگه همشون یه چیزی دارن و این گرادیان هموارتره اصطلاحاً برمی‌گرده به عقب که دیگه نمیخوام در مورد اینا صحبت کنم ولی دلتون خواست میتونید مشاهده بفرمایید و در نهایت چی میشه در نهایت وزن شبکه‌تون آپدیت میشن کارایی که می‌کنید اینه که شما
26
+
27
+ درست میکنید مثلا اینکه فرض کنید که دیتا ستتون مثلاً ۱۰۰۰ تا ترینینگ داره مثلا ده تا ده تاش می‌کنید فقط اتفاقی که میفته اینه که این ده تا لزوماً چی هم سایز نیستند تو زبان برنامه نویسی حتماً این مثلاً کراس و سنسور فلو اینا ازتون میپرسن تو مینی بچت بهم بگو ماکس سایزت چنده خب که مثلا میگید ماکس من ۳۵ فریمه چیکار میکنه حدس میزنید برای اونایی که به ۳۵ نمیرسن با صفرش میکنه ولی بع میفهمه که این مثلاً حالا با یه چیزی پش میکنه ولی بعداً می‌فهمه که از اینا استفاده نکنه خب مینیچ هم که می‌ذاره اینه که گرادیان ها رو که حساب میکنه جمع گرادیان میانگین گرادیان رو میاد برمیگردونه و وزن ها رو آپدیت میکنه میره بچه بعدی میره بعدی هی میره یه پاک تمام میشه اینقدر شما باید برید خب که به یه نقطه خیلی خوبی برسید که چی که دیگه رو ترینینگ تو خوب جواب بده یعنی واقعا اون ضریب های نارنجیه
28
+
29
+ خوب شده باشم مثلاً جمله من علی را دیدم قشنگ اینجوری تولید کنه من من علی علی را دیدم دیدم دیدم دیدم دیدم یه همچین چیزی تولید کنه و حس کنید که خب به نقطه خوبی رسیده و الی آخر حله این شد ترینینگ ماجرا تو تست یه اتفاق بد میفته شما دیگه لیبل‌ها رو ندارید وقتی یه تست یه جمله بهش میدید میگید برام در بیاد چیکار بکنم اونجا چه پیشنهادی دارید این دفعه دیگه این دفعه دیگه شما نارنجی ها رو ندارید عرض به حضور شما که الان قرمز و سبز ها دارید و قرمز و سبز و آبی صورتی دارید که چی شدن که خوب ترین شدن دیگه و تا به آبی و صورتی می‌رسید مثلاً اینجا دیگه چند تا براتون خروجی تولید می‌کنه ۱۰۰ تا تولید میکنه ولی شما تو جمله‌تون ممکنه پنج تا کلمه باشه پیشنهادتون چیه وقتی می‌خواید جمله تولید کنید به عنوان ماکسیممش ۱۰۰ تا درای است دیگه
30
+
31
+ سوال برای همه شفاف باشه اینه که الان من شبکه کردم دیگه می‌خوام برم تو تست می‌خوام یه جمله دیگه بگم حسین با علی به بیرون رفتند حالا کلمه‌ها رو جدا جدا تو جملات دیگه دیده ولی این جمله رو عین ندیده بوده و میخواد اینو برام تولید کنه خب دادم به شبکه هم رفته تمام صورتی آبی ها رو تولید کرده که همشون چند چند تا درای اند صد تا صد تایی اند ولی میدونم که مثلاً اولیش مال حسین دومیش علی و و خب چیکار کنم حالا میخوام جمله بسازم چیکار میکنید شما اولیش اینه که گریدی بریم جلو به اولی بالا نگاه کنیم سمت چپ ماکسیمم بگیریم مثلا حسین حسین انتخاب میکنه بعدیش می‌ریم چیه باز فرض کنیم حسین دوباره می‌نویسین حسین خب میریم جلو و انشالله می‌گیم که چی حسین بعدش یه جا و تولید بشه یه جای چند تایی علی تولید بشه فلان فلان به بیرون رفتند
32
+
33
+ نویسی میکنید مثلا ۳۰ تا حسین نوشته اولش حسین‌های متوالی یکیشو حساب می‌کنید سه تا حسین یک حسین ها حسین و علی به بیرون رفتن درسته یه چیز کوتاه تری به وجود میاد نتیجه اخلاقی جملاتی که از سیتی سی تولید میشن از لحاظ سایزی از جملات ورودی چی اند کوچکتر مساوی بزرگتر مساوی خواهند بود از لحاظ تولیدی لزوما خوب جواب نمیده یه نگاه بندازید این مثلاً من گوگل ترنس رو باز کنم قبلاً هم براتون نوشتم جانم مینویسم چی ام من هستم می‌نویسم ای ام اون نمی‌نویسه من هستم یک می‌نویسم من یک هستم ها این شانس رو به خودش میده که چیزای دیگه هم داشته
34
+
35
+ ماجرا اینه که تو واقعیت از روش بیم سرچ استفاده می‌کنه بیم سرچ گریدی دیگه نیست میگه تو مثلا ۵ تا ماکسیموم احتمال برام نگه دار زمانی که به اولی میرسه پنج تا ماکسیمم احتمال یه جایی کنار می‌ذاره دومی که میره میشه چی چند حالت اتفاق میفته ممکنه سه تاش از اولی انتخاب شده باشه دوتاش از دومی سه تای اولم دیگه اصلا انتخاب نشن باز دوباره پنج تا بالای کل رو نگه مید یعنی حاصل ضرب احتمال اولی در دومی رو نگه میداره بعد همینطور میره جلو تا روز آخر پنج تا ماکسیمم نگه می‌داره تا برسه به ته و بینش حالا دیگه یکیشو یا بیشترین یا یکیشو سلکت میکنه اینجا دیگه انشالله واقعاً جمله خوبی رو انتخاب کرده خب کاری که توی واقعیت داره اتفاق میفته مثلا حسین مثلا این برای پایان‌نامش استفاده کرده زبان آلمانیه که ترجمه میده بهش جمله میده و اون جمله خروجی تحویل میده
36
+
37
+ چه شاخصی برای ارزشیابیش داریم دیگه الان اون معنای به اون معنای ثابت مثل سابق اکیوریسی و اینا رو چیکار می‌خواید بکنید چه پیشنهادی دارید مثلاً جمله این بوده من علی را دیدم جمله صحیح این بوده بعد این انواع حالت‌ها دارد بنویسید من محمد را دیدم من علی را مثلا با حسین دیدم من مثلاً به جای علی بنویسه عالی مثلاً فلان یه چیزی فلان و الی آخر اتفاق که میفته شاخص تعریف میشه نگاه میکنن جمله اول چقدر بوده چی بوده جمله‌ای که شما تولید کردید چند تا شاخص رو توش میسنجن یکی اینکه چقدر شما اینزشن اضافه داشتید این کلمه اضافه آوردید که نباید میبود چه دلیشن بیخودی داشتید کلمه باید می‌گفتید که نگفتید و چه کلمات دیگه‌ای که جایگزین آوردید خب و اینا رو چیکار میکنه ورد ارور
38
+
39
+ ریت یا wr بهش میگن که یه چیز وجود داره یه لایبراری است به نام جیور بهش میگن حسین درست میگن جی آی آر که اون اگه مثلا چیز کنید فراخوانی کنید توی پایتون حساب میکنه شما کد نمیزنید عرض به حضور شما که تو ویکی پدیا هم هست توضیح داده گفته که چجوری به دست میاد گفته که اول تو جمله اولتون بشمارید چند تا کلمه بوده تو جمله دومتون شما چی تولید کردید چند تا دلیشن چند تا اینزیشن اینا داشتید و فلان و فلان چند تا سابتوشن داشتید یعنی یک کلمه بوده که شما جاش یه چیز دیگه آوردید خب و اینا رو برید حساب بکنید هر کیبورد ریتش کمتر باشه برنده است خب و حالا حسین براتون میگه که تو کارش به چه دلی یاری رسید یه ماجرای دیگه هم بگم و سیتی سیلاس رو من تمام کنم پس کلید واژه هامون این شد که یه شبکه تولید میکنیم وقتی که میخویم ترین بکنیم باید
40
+
41
+ توکن‌های مربوطه شو بکشیم بیرون که اینا رو خود چیز برامون انجام میده شما تو کد که مینویسید شما شماره توکن‌ها رو خودش میکشه بیرون اون جدول نارنجیه رو به وجود میاره بعد عرض به حضور شما که تو ترینینگش چیز میکنید بهش میگید که برو آلفا بتا گاما رو حساب کن که اون خودش حساب میکنه رو گاما میره یه لاست تشکیل میده و برمیگرده و وزن شبکه رو آپدیت میکنه میرسید به یه شبکه خیلی خوب تو شبکه خیلی خوبی رسیدید دیگه تو تست هستید تو تست چیکار میکنید دادن یه چیز طولانی ۱۰۰ تایی میگیرید یا با روش بیم سرچ که پنج تا ماکسیمم بردار تا آخر برو چیکار می‌کنید جمله‌تونو انتخاب می‌کنید حالا سوال آخرم بگم و تمومش کنیم فرض کنید مثلاً شما یه چیزی دست نوشته دارید و اون میخواد به شما تک ��ک حرف ها رو تایپ شده بده مثلاً شما رو کاغذ یه چیزی نوشتید جلو دوربین گرفتید و اون میخوید انتظار دارید براتون تک تک حرفاش تایپ کنه هلو رسیدید و اچ ای ال ال او دارید چیکار کنیم الان اگه پنج تا ل پشت سر هم
42
+
43
+ تشکیل بده تشخیص بده تا الان فرضمون بر این بوده که یکیه درسته چیکار کنیم که دوتا بشناسیم جان یه حقه ساده داره یه توکن به توکن‌های خودمون اضافه می‌کنیم به نام توکن بلنک یعنی ۱۰۰ تا کلمه اضافه کنید که البته مثلاً کراس اولی اضافه میکنه حتی بهتون میگه میگه صفر برای منه میگه صفر برای بلنکه بقیه شما کلاساتونو از یک شروع کنید خب حالا اگه به این رسیدید اچ ای ال ال خط تیره ال ال او حالا این چیه این هلو حالا این که میگم معادل هستند کدوما کدوما معادلن بچه‌ها کدوما معادل چون اینا در واقع تو واقعیت ممکنه بهش برسید ها ای خط فاصله خط فاصله ای ای خط فاصله خط فاصله ای خط فاصله خط فاصله خط فاصله a a خط فاصله ای کدام یک با دیگران متفاوت است
44
+
45
+ همه قبلی‌ها همه با هم یکی‌ان و حالا اینم بهتون باز بگم تو لاسشون تمام چون چارت‌های بالای یکی‌ان لاس هر چهار تا رو با هم جمع میزنه یعنی وقتی که میخواد آپدیت کنه شناسایی کنیم چه ای ای دش چه دش ای دش اینجوری اینا همه ای خالین و بعد که تولید میکنه براتون اون فقط ای می‌نویسه که بهش میگید برام بنویس جمله من چی بود میگه تو اینجا فقط ای تشخیص دادی خب یه نمونه هم بهتون بگم یه استراحتی بفرمایید و بعدش چیز میکنیم عرض به حضور شما که دیگه آقای رنجبر میاد کنارمون و ادامه میده که احتمال مسیر بود بله این احتمال رفته احتمال برگشته بشه نه ترین نیست هر جمله متفاوت عیب نداره ولی خروجی های نارنجی به دست اومده از یارو آلفا دیگه وقتی جدول نارنجی تشکیل شده آلفا ب
46
+
47
+ تقسیم بدست میاد از همون عددهایی که تو اون جدول نارنجی‌اند برای هر عیب نداره بله دیگه هر آلفای جداگانه گامای خودشو داره با گامای خودش یه گرادیان راه میفته میره یه گرادیانی برای دبلیو های شبکه چیز بدست میاد حالا دیگه چیز دیگه نبود با همین گرادیانه وزن آپدیت میشن تست ما وقتی جمله تست هیچ گرادیان دیگه نداریم که چند تای اول چی دیگه تمام دیگه انشالله آلفاش خوبه یعنی اصلا دیگه چیز میکنم من سرچ میرم دیگه ضرب احتمالا هی دارم ضرب میکنم حالا تو اسلاید حسین یه دونه هست میرسیم بچه‌ها این مثلاً فرض کنید که یکی از مثال های چیزه اسپیچ ریکشن که حالا مثالی که حسین براتون آوردم از این جنسه روی دیتا ستی بوده که این اومده چیز زده سیتی سیلاس زده بعد توضیح داده اولا کلی
48
+
49
+ چی بوده یه بنده خدایی از روی یه سری متن خونده به مدت نمی‌دونم چند ساعت حالا اجازه بدید تند تند اگه کسی کمکم کنه چشمش ببینه اینتروداکشنشو بریم گفته چی ال ال جی اسپیچ دیتا ست درسته شورت آدیو کلیپس داره که یک سینگل اسپیکری اومده از روی هفت تا کتاب نانفشن خونده صداش موجوده و متن معادلش هم موجوده خب این این جایی که میرسه حالا سیتی سیشو می‌ذارم حسین بگه انشالله تهش فقط می‌خواستم نشونتون بدم اولا اینکه چجوری اسپکتروگرمشو کشیده این سبزه رو این سبز زرد رو ورودی میده ها خب صوته اون پایینیه هستش پلیش هم گذاشته که شما بتونید بشنوید چی بود مثلا بیارم بشنوید
50
+
51
+ بعد این سبزه زرده که وسطه اون جاییه که ما به عنوان ورودی به شبکه میدیم بعد در مورد مدلشو در مورد سیتی سیلاسش و فلان و فلان اینه اینکه شبکه چه جوری می‌ساز�� کانولوشن اینا و بعدش ال سی ام میزنه کاملا طبیعی مثلا شما وقتی صوت بدید عکسش کنید اول میتونید از یه کامشن ردش کنید به یک ماتریس برسید که مثلا ام باشه بعد هر ستون اونو به عنوان ورودی سی میشه که در مورد ترینینگ صحبت فقط اینجا ببینید چی تولید کرده بچه‌ها نمونه‌هاشو ببینید نوشته ۳۶۹ از ۳۶۹ خب ریت یک افتضاحه خب تارگت چی بوده باید میگفته اسپشل ایجنت نمیدونم فلان فلان چی تولید کرده اس اس تولید کرده یعنی فقط احتمال شبکه به قدری داغون
52
+
53
+ بعدی رفته جلوتر خب سه تا اس تولید کرده یعنی اینجوری بوده که اس مثلا یه اس دیگه یا دو سه تا اس دیگه دوباره یکی دوتا دیگه این اصلا خوب نیست ولی لحظه آخرش ببینید تو سه تا باکس های سیاه ببینید اگه بتونید بخواید بزرگش کنم آره طولانی است دیگه هری پا ش دقیقه بعد نوشته که حداقل ۵۰ تارگت اولیه رو بخونید نوشته آدیو فایل ال جی صف تارگت چی بوده سر توماس نمیدونم اور بری از فلان آندتلی پویزن بای فلان درسته زیرش چی تشخیص داده سر اولش چی تشخیص داده به جای اس آی آر سی آر تشخیص داده
54
+
55
+ خودشه اور بریش خودشه خودشه آندریش خودشه نه می‌دونم باید بستگی داره که در سطح حرف بوده یا نه اگه در ساعت حرف بوده شاید اینقدر ترینینگش قوی باشه اونم حتی بفهمه آره میدونم ولی ممکنه که تو ترینینگش فهمیده باشه که وقتی چه جوری میگن اس وقتی چجوری میگن سیه یعنی اگه دیتا ستش غنی باشه به این نقطه ها میرسه میبینید الان وقتی که به اندازه کافی ترین شده خیلی جای خفنی رسیده ها و با همین سی کار انجام شد بچه‌ها سیتی سی پیپر اولش سال 2۶ در میاد از یک گروه مشترکی فکر کنم توی سوئیس و تکنیکال یورسیونیک بوده دانشگاه صنعتی مونیخ و عرض به حضور شما که تا به امروز به نظرم کار میکنه یعنی شما اگر تو مثلا بچه ها کیا به دردشون میخوره قطعا خانم مهندس تو حوزه ترجمه
56
+
57
+ جمله زبان اشاره به دردش می‌خوره چون اصلاً تک کلمه بخوایم بهش بدیم کمرشکنه مثلاً ۲۰۰۰ تا جمله‌ای که بخوایم در حد کلمه بشکنیم نمی‌تونیم خب ایشون قطعاً سیتی سیلاس می‌تونه کاندیدای کارش باشه البته یه عده ممکنه ویندوینگ بزننا یعنی همون کارای کلاسیک ساده اینکه یه چیزی دارید سیکونس دارید یه ویندوز بندازید مثلاً با چیز طول ۱۰ فریم بگید آقا چی توش تولید شد بگو دیگه حالا هر چی بود بگو بیا ده تای بعدی ده تای بعدی برو جلو ولی سیتی دیگه هیچ شانس بهش میدید که خودش بره بگه عرض به حضور شما که کسایی که آنالیز حرکت اگه دارید می‌کنید من نمونه کار آقای محمد محمدزاده دیدم دانشگاه آقای دکتر بهزادی پور این بود که مثلاً فرض کنید یه دیتایی داشت که طرف اول دو قدم راه میرفت بعد میچرخید بعد مثلا یه کار دیگه میکرد و مثلا شما این شایدشکونید در تک تک و بخواید کل جمله رو بهش بدید بگید این این مثلاً ۱۰۰ فریمی که بهت دادم این سه تا چهار تا حرکت توش بود خب حالا اونو برو ارزیابی کن
58
+
59
+ اینا مواردی که بچه‌ها به ذهنم می‌خورد خدمتتون بگم به نظرم تئوریش در این حد بسه و عموماً متوجه شدید انشالله که چه اتفاقی داره پشت سی تی سی میفته و فقط یاد بگیرید ازش استفاده کنید حالا چگونه استفاده کنید ۵ دقیقه بچه‌ها استراحت بفرمایید یه ربع به ۱۲ بیاید که حسین هم یه ۴۰ دقیقه‌ای وقت داشته باشه حالا دو تا موضوع میخواد براتون بگه هم نحوه پیاده سازی سیلاس توی بهتون میگه هم یه مقدار ارائه از پایان نامه خودش داره که بهتون بگه چجوری از این سی س��لاسه استفاده کرد و اینم بشه برنامه امروزمون حالا اگه میخوید متوقف بفرمایید ویدیوتون رو یه بچه پنج دقیقه استراحت بفرمایید یه ربع به ۱۲ همه اینجا باشید که دیگه آقای رنجبر زحمت بکشن شروع بکنن کارو برامون خیلی
60
+
data/GAN_Lab_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ داده‌های ام نیست و می‌دونه اینا ۱ و ۲ فلانن گول بخوره و فکر کنه اون دویی که شما ساختید اینجا ساخته میشه بدون اینکه کسی با قلم نوشته باشه چی فرض کنه که این هم دوئه خب اولش که لود کردن در واقع دیتا ست و ایناست و اینکه یه عکس نمونه بهم نشون بده و همون کارهای قدیمیه شما کلاً چند تا چیز اینجا نیاز دارید عرض به حضور شما یکی تابع بل جنریتور یا همون جنریتور خودمونه هادی باشه جنریتور خودمونه که اول گفته یه نویز شیپ ۱۰۰ تایی بردار با صد تا عدد رندوم نرمالستربیوشننی مثلاً از گوسین صد تا عدد میکشه بیرون و با این ۱۰۰ تا میخواد بره در نهایت چیکار کنه یه عکس ۲۸ در ۲۸ در یک تولید کنه خب برای اینکه این کار بکنه دیدید دیگه یه در واقع چیز شبکه داره میسازه لایه اولش دنسه و ریشهپش میکنه به ۱۲۸ تایی بچمالیزیشن میزنه کار خوبیه
2
+
3
+ توصیه کردن تو پیپرهای اصلی گن که نرمالیزیشن استفاده کنید موفق میشید بعد کاندو دی ترانسپوز میزنه که بزرگش کنه درسته و میره جلو تهش انقدر امکان دودی آخری که میزنه با پدینگ و اینای مناسبی که هست محاسبه باید بکنید که عکس خروجیش ۲۸ در ۲۸ در بیاد این شد چی جنریتور من که قراره چی بشه بعداً پارامترهاش تیون بشن یه چیزی ساختم به نام مود مساوی با تی اف crs مدله اینپوتش نویزه اوت چیه لایه آخر شبکه نگاه بکنید که دو دی ترنسپوز که اون سبب میشه ۲۸ در ۲۸ در بیاد جان نه ده در یک نه بالا نگاه کن نویزش چیز بود ۱۰ ۱۰۰ ببخشید ۱۰۰ ۱۰۰ بود بخونش دیگه آره فرض کن که یه همچین کاری کردی فرض کن اگه ۱۱۰ در دش کردی آره مثلا ده در کردی ۲۸ در ۲۸ با آپشن یا ترانسپ
4
+
5
+ تنظیم نیست خب یه دونه دارم یه چیز عادی شبکه عادی خودمه یه ۲۸ ۲۸ میگیره بهتون میگه که ریله یا فیک و عرض به حضور شما چند تا کانو دودی عادی زدهلو زده کان دو دی اینجوری تهش هم چی زده آخرینش که نوشته ولیدیتی مساوی و فلان لایه آخرشه ولیتی شود تابع فعال سازیش چیه سیگ یکی یا صفر بهم میده یا فیک یا ریل و تهش گفته که یه شبکه بساز که اینپوتش آی ام جی باشه ایمیج من باشه اوت پوتش چی باشه ولیدیتی باشه اینم برید برای خودتون بخونید جای سخت ماجرا تابع ترینه چجوری این چیز رو ترین کنید شبکه گ کلا دور هم ترین کنید که همون اول دیسکریمتور بعد جنریتور الی آخر
6
+
7
+ تابع یک ایکس ترین ورودی می‌گیرد نامبرپاکس رو میگیره فلان فلان بعد چیکار میکنه هفت بچ میکنه نصف میکنه مثلاً اگه بخواید بچه‌های ده تایی بهش بدید میگه پنج تا برو ریل بردار پنج تا از فیکای من بردار خب تو هر بچش نصف واقعی میده نصف چیز میده خروجی جنریتور میده که اگه آخرش چیز بخوره گول بخوره خوبه دیگه یعنی نتونه اینا رو از همدیگه تمیز بده خوب نوشته که برای دیسکتور ترین کنید که اول خب دیسکتور وضعش خرابه بزار حداقل چیزای خودشو ترین های خودشو بتونه پیدا بکنه و اینا شما چیز میکنید عرض به حضور شما که اولا از ایکس ترین که واقعی ها بوده چند تا رندوم سلکت کرده از جنریتور هم گفته چند تا برام تو بساز خب نویز ورودی بهش داده گفته چند تا تو بساز درسته و بعد گفته که چیز کن عرض به حضور شما اینا رو کان
8
+
9
+ زده تنگ هم شافلم کرده که ترینا و چیزا فیکا قاطی بشن و این زده تنگم گفته که آی رو بزار صفر دیسکریمنیتور ترینبل و ترو کن یعنی اجازه داشته باشه ترین بشه وایل آی کوچکتر از ۲۰ فیت کن یعنی چیزش کن شروع کردنش عرض به حضور شما پنج ایپاک برو برو اکیوریسی شو بخون اگر اکیوریسی ب��لای ۹۰ درصد بود بنویس یکس و بیا بیرون از این وایله اگه نبود یه یکی بهش اضافه کن دوباره تو آی بمون تا کجا تا آی ۲۰ نهایتا این کاملا چی باید بازی کنید باشه ها خوب دیسکتور یه پله وضعش خوب میشه میریم پایین جنریتور برای جنریتور دوباره اینپوت نویز رو میاریم نویز تعریف میکنیم بعد ولید وای رو تعریف میکنم این دفعه یک ولید وای یعنی چی یعنی میخوام بگم نویز های که من میدم به جنریتور بعد تو دادی
10
+
11
+ ۱ خب لیبلش یک شد الان قبلا لیبلش چند بود صفر بود دیگه نویز قبلا جنریتور بازه لیبل یکه باید خروجی جی دی بشه یک لیبل یک بهش میدم بعد بهش گفتم که برو از جنریتور ایمیج بساز دیسکتور و فال کن اینجا مهمه ها خب بعد چیز کن بعد برو شبکه کانباین مدل رو بزن که اینپوتش نویزه اوت پوتش ولیدیتیه ولیدیتی چی بود خروجی دی جی بود نه خود جی یعنی جی رو باز میدادی به دی که دی جی تولید بشه و اونو با یک مقایسه کنید و عرض به حضور شما که مدلتون رو فیت میکنید دوباره اینجا نوشتیم مادامی که آی کوچکتر از نمیدونم فلان است ای بابا ببخشید مادامی که آی
12
+
13
+ کوچکتر از بیسته بیا برام این کارو بکن اگر اکیوریسیت رسید به بالای ۹۰ درصد دیگه بیا بیرون وگرنه آی تو بیشتر کن و ۲۰ بار تو این حلقه وایله بچرخ و تو این حلقه جیتو قوی کن خب این کارم گفتیم بکنه و بعدش که این کارو کرد تهش دیگه چی عرض به حضور شما که گفته که حالا یه سری چیزا رو برام پلاک کن که ببینم که الان خروجیش هم میبینید دیگه میره تو کد اصلی خب دیگه حالا میگه داده نیست و لود کن ایکس ترین و اینا رو برام بساز و فلان فلان عرض به حضور شما اینجا ته ته باکس شماره چندمه ننوشته دستور تابع ترین رو صدا میزنه نوشته ترین ایکس ترین لیبل فلان این مهمترین جای کد که طولانی تر اینه بعد فقط گفته که یه خط بالاترش گفته که چی ایکس لیبل یک چنده ایکس
14
+
15
+ فقط ترین بردار که اونم وقتی میخواد فیکشو بسازه بره فقط هشت برات بسازه خب بچه‌ها ما دادیم نگاه اولش این نویزه رو داده خب این ران میشه هیچ مشکلی نداره کد بزنید ران میشه اولش نویزه رو داده بعدش رفته اینو تولید کرده خب دارید میبینید دیگه نه بعد رفته اینو تولید کرده داره میره جلو حالا هی داره میره جلو عرض به حضور شما بعد به اینجا رسیده اینجا مثلاً حالا کم کم دیگه یه هشتی داره ظاهر میشه ولی هنوز قوی نیست اونقدر و با این تعداد ایپاک های که ما گفتیم رفته جلو رفته جلو مثلا حالا برای اینکه هشت تولید کنه میخوام جنریتور عملکردشو بهتون نشون بدم این دیگه نگاه از اینجا دیگه یه جورایی هشت هست دیگه خب حالا از دید ما کم کم که میگم انسان باید ببینه مهم ها شما باید ببینید ببینید که
16
+
17
+ اعمال چیز شدن ارضا شدن خروجی اصلاً قابل قبوله قابل بحثه یا نه چقدر داره یکی تولید می‌کنه یعنی یه چالشی که مثلاً یه هشت همیشه یک ۸ تا رفته پیدا کرده همیشه اونو فقط بسازتش خب مثلاً اینا بایاس نشه به یه چیزی ببین الان نگاه کنید وقتی رفته جلو داره هشت تاش بهتر میشه و البته اینا باید میگم باید باز بیشتر و بیشتر بحث بشه که آیا چیز آیا این که تولید میکنه خوبه یا هنوز ادامه بدم هنوز کمه و اینجا دیگه خوبه واقعاً چیزایی نوشته که شبیه هشت آدمه یعنی نیست دیگه واقعا هشتش همینه یه همچین هشت اینم جالبه این فیک ها یعنی اصلا کسی ننوشته با خودکار اینو خب و این تونست تولید کنه و موفق شدیم بالاخره یه داده فیک بسازیم و میتونید به اینا فکر کنید این باز هشت خی��ی خوبیه تولید کرده این خیلی هشت خوبیه که تولید کرده
18
+
19
+ و این شبکه‌تونو می‌تونید بردارید باهاش اگرچه خوب چیزه دیگه گفتم شیپشو بهمون بده مثلاً ۲۸ در ۲۸ در یکه که ۵۸۵۱ مثلا الان دارد خب من عرضم تمام الان این کدم باز در اختیارتون قرار میدیم آقای بابایی زحمت بکشید تشریف بیارید در مورد سایکل برامون صحبت کنن دیتا ست حدودی میگم خدمتتون چیه که دیگه توضیحات کد نویسیش با ایشونه ایشون دو نوع عکس داره یه نوع عکس اومده با دست یه سری چیزا رو گرفته مثلاً موبایل لیوان اینا یعنی دست دست یکی توشه یکی از عکس‌هاست که دست هیچکی توش نیست فقط از اون آبجکت است ولی ممکن هم چیز نباشن ها معادل نباشن یعنی اون موبایله اینجوری نباشه یه بار با دست یه بار بی دست ممکنه یه با این موبایل باید دست با یه موبایل دیگه بی دست عکس باشه حالا سوال اینه که شبکه بسازه که عکس دست دار رو بهش بدی بی دستشو بهت بده تحویل یا بی دستش یه دستی بزار اونجا
20
+
21
+ موبایل لیوانه رو بگیره حالا ایشون برای هدف خودش لپ تاپ خودتونو دارید شیر می‌کنم تو گوگل کلوپ که دیگه همین جا بچه‌ها ضبطشون ادامه پیدا بکنه حالا کد میشه کاستوم مثلا چون که اسم نذاشتیم برای تعریف شده حالا میشه مثلا خودتون شروع بفرمایید توضیح بده و چیز جنرال خدا لازم چشم به نام خدا این شبکه رو من استراکچ ساختارش اینجوری زدم که دقیقا مشابه همون ساختار مقاله
22
+
23
+ مقاله چون اینا خیلی میشه با ساختارش ور رفت یعنی چه ساختارهای جنراتور باشه چه ساختار باشه یا حالا بخش‌های دیگش اینم باید فانتوم بشه که دقیقا بفهمیم که پارامترها مثلا چجوری باشن بخاطر همون چون ما اونقدر مثلا دسترسی نداریم به کامپیوتر که خودمون اونقدر مثلا ترین کنیم که پارامترهای مناسب پیدا کنیم میشه پارامترهای مناسب که حالا بقیه استفاده کردن مثلا استفاده میکنیم بخاطر همین من حالا اونا توی یعنی خود کاری که کرده بودم توی مقاله اصلی پایتون زده بودن من این کد زدم بعدش اول که به گوگل درایو وصل میشیم چون که ما دیتا ست های که داریم توی درایو گذاشتیم بعد این ست اینستنت نورمالیزیشن رو ما اینجا اد میکنیم چرا چون که این چیزی که مقاله اصلی برای نورزیشن استفاده شده حالا
24
+
25
+ چیزهایی که اینجا ایمپورت شدن همه چیزایی که قبلا استفاده جدیدی نیستش یعنی شبکه که میسازیم دقیقا با همون چیزایی میسازیم که قبلا استفاده کردیم یعنی ترانسپوز زیروس نمیدونم لیکلو همین اکتیویشن اینا یعنی چیز جدیدی اینجا نداره خب اولتور تعریف میکنیم یه چیزی که من بگم که دیسکاوری که ما اینجا داریم یه مقدار متفاوت هستش که حالا قبلا تعریف شده و اینا چرا چون ما فرضا یه تصویر داریم ۲۵۶ ۲۵۶ ما به جای اینکه بیایم این تصویر رو مثلا تشخیص بدیم که ریل یا فیک یعنی کل تصویری یک یا صفر بدیم اومده کاری که کرده اینه که تصویر رو به یه پت تقسیم کرده اینجا خودمون میتونیم سایز پچ رو بدیم بالا مثلا پ ۱۶ در ۱۶ یعنی ۲۵ ۱۶ کرده این تصویر ۱۶ قسمت
26
+
27
+ بعدش اومده وقتی قضاوت می‌کنه این تصویرو میاد هر بخش کوچک از پیکسل رو تعیین میکنه که این بخش ریل یا فیکه یعنی به کل ایمیج یه عدد نمیده خروجی که ما داریم اینجا پچ اوت اینجا یه در واقع ماتریسیه به اندازه در پچ یعنی اینه که یک صفر تعیین میکنه که هر قسمت از تصویر ریل یا فیکه بعد قسمت های وسطیش هم که مشخصه کان تو مثلا چهار در چهار بعد ۶۴ تا فیلتر اسلاید دوره مثلا پش سه بعد یعنی تا اینجاش این بوده برای دیسک حالا نسبتا سر روالیه حالا بعدش میریم جنراتور دیفاین میکنیم تعریف کنیم توی تعریف جنراتور من اینو داریم که ما اول میایم
28
+
29
+ دکتر قبل این تعریف کردن این بود که از هیچی میومد یه عدد تولید میکرد ما یه نویزی بهش میدادیم میکرد عکس حالا نکته اینه که ما اینجا نویز نمیدیم ما اینجا یه عکس میدیم و خروجی عکس انتظار داریم پس اول عکس رو میگیره با این کانولوشن های که میزنه میاد به اینجا یعنی میاد دقیقا کانولوشن میزنیم میایم فیچر عکس در میاریم بعد اینجا یه چند تا بلاک رزنت داریم دلیل اینم که این بلاک میزدیم بخاطر اینه که خب ما میخوایم یه عکس رو از یه دوم ببریم یا حالا ممکنه عکس نباشه یعنی اینم ادامه میگم یا یه چیزی رو میخویم از یه دومین ببریم به دومین دیگه اصلا میخوایم آهنگ از یه صدا صدای نکته اینه که اینجا یه کامپلکسیتی زیادی داره اینجا پیچیدگی زیادی داره و برای اینکه ما بتونیم این پیچیدگی رو از این به باید این وسط
30
+
31
+ بزرگ نباشه نمیتونه خوب فیت کنه همون اینجا یه چند تا بلاک هم گذاشته که این رزیدنت پلاک‌ها براش ما اومدیم اینور یه دونه جداگانه دیفاین کردیم یه دونه در واقع فانکشن که ما میایم اول عکس رو میگیریم عکس که گرفتیم یه تعداد کانولوشنش اعمال میکنیم بعد خروجی این کانولوشن ها رو با خود عکس ورودی کانتکت نت میکنیم این میشه در واقع خروجی شبکه رضایت ما شبیه خودش هم رد شده است بعدش بعد از شبکه های رزنت حالا نکته اینه که ما اول قبل از اومدیم در واقع شبکه
32
+
33
+ حالا باید آب دوباره بزرگ عکس ها رو دوباره بزرگ کنیم اینجا هم این دوتا رو متقارن کردیم تا ورودی و خروجی هر اتفاقی که بالا میفته پایین بیفته و این باعث میشه که مثلا ورودی خروجی مون شیپش یکی باشه بعدش این توی اینجا این اتفاق میفته که خروجی که ما داریم یه اوت ایمیج میشه که توی عمل باید حالا از یک دوم دیگه داده ما رو ببره مدلی هم که داریم یه دونه ورودی میگیره یه خروجی میده دیگه به همین خوب نکته حالا کار از اینجا به بعد شروع میشه یعنی کار سایکل از اینجا بعد شروع میشه تا اینجاش اوکی بود روال بود توی سایکل ما در واقع چهار مدل لاس داریم یه لاس مون که همون لاس خود مثل لاس گنه یعنیسه نکته اینه که ما یه تصویری که
34
+
35
+ داخل کد میگم ولی الان ولی توی ادامه ما توی سایک آتیلاس داریم که این آیدنتیلاس اینجوریه ما میگیم که ما میگیم که ما یه تصویری داریم این حالا ما یه ژنراتور داریم که این جنراتور از دومین در واقع بی میبره به دومین ای از دومین بی میبره به دوم اگر ما به این تصویر ای بدیم این خروجی به ما باید همون تصویر ای بده چون این ورودی که میگیره حالا لزوما بی
36
+
37
+ نکته اینه که ببره دیگه این باعث میشه که مثلا رنگ مثلا تصویر خروجی رنگشو زیاد آسیب نزنه بعد یه دونه فوروارد لاس داریم که همون چیزی که دکتر گفتن یعنی ما یه تصویری از دومین بی از دوباره یعنی اینکه ما وقتی مثلا ای میدیم و از شبکه میبره به بی حالا بی رو دوباره
38
+
39
+ نکته ای میدیم رو داریم حالا کاری که ما میخویم بکنیم اینه ما میگیم ای که تولید شده را بیا پیکسل وای با این ای که ما داریم و میدونیم درسته این دوتا با هم مقایسه کن و این اختلاف یعنی
40
+
41
+ این شبکه ها خوب دونه دونه باید کنیم اصلی نیست ما در نهایت خروجی کل این کارمون اینه چهار تا شبکه یک شبکه میگیریم که جنراتور یعنی اگر دومین بی بهش بده یه شبکه میگیریم که ای یعنی اگر دوم ای بدیم ��ومین بی بهمون میده یه شبکه میگیریم که دیسک میکنه یعنی تشخیص میده عکس های که از یه عکس از بهش قیفه که یه شبکه از دومین ای بهش تصویر میدیم این فیک ما این چهار تا خب دوتاش اینا دو
42
+
43
+ باید همزمان کنیم بعد یکی اینه خب یعنی یکی ما که این داستان فرق داریم این دو تای آخر کلا بی میشه مقایسه حالا نکته اینه ما میدونیم که به این شبکه ورودی ای بدیم بی بمونه حالا اگه ما به این شبکه ورودی بی بدیم چه اتفاقی میفته یعنی به این شبکه ورودی بی بدیم
44
+
45
+ نکته اینه که این شبکه وظیفه اش این نیست که مثلا یعنی یه لات همین پیکس با این مقایسه کنید یعنی این دوتا با هم بایدشن خروجی این باید خودش باشه چرا چرا ساده تر یه نگاهش داشته از این فضا اگر ما اونو بهش بدیم اون بردارش توی فضای سی ما عکس داشتیم خب یه اصل بهش میدادیم همون
46
+
47
+ ما اینه فقط اون چیزی که می‌خوایم تغییر مثلاً خب یعنی توی عکس فقط دنبال اسبا میگرده دنبال پرتقال میگرده پرت میکنه خب حالا من یک تصویری بهش بدیم که توش اسب نباشه خب پیدا باید خروجی همون تصویر خروجی حالا نکته اینه اگه ما این کار نکنیم خروجی باز بهمون چیز خوبی میده خروجی اوکی میده ولی نکته اینه که رنگا رو دیگه قاطی خوب نمیده یعنی مثلا شما وقتی این کاری که این تصویر خیلی زیادی رنگ ها داره الان مقاله اصلی رو وا کنیم یا نگاه کنید اینجا نشون میده یعنی با جفتش مقایسه کرده با ای و بدون یعنی
48
+
49
+ ولی اهمیت نباشه این مسئله وقتی ورودی میگیره آره حالا جور دیگه از سوال بپرس جواب خوب نکته اینه که ما حالا فشن تعریف میکنیم به اسم فشن کامپوزیت مدل خب نکته اینه که ما شبکه جنریتور که داشتیم هم داشتیم حالا ما میخوایم اینا رو ترین کنیم برای ترین
50
+
51
+ در واقع از جنریتور ما نمیتونیم مستقل ترین کنیم باید این شبکه رو تعریف کنیم داخل این شبکه چون باید دونه دونه وارد کنیم داخل این شبکه میگیم آقا مثلا اینجا ما ورودی جن یک رو میگیریم جنریتور دو رو میگیریم یه دیستتور میگیریم و ایمیج شی ما میایم میگیم جنریتور یک رو میخویم ترین کنیم پس با جن با دیسمیتور و دو کاری نداریم اینا ترینبل نیستند بعد میایم میگیم که ما این شبکه مون در نهایت قراره دو تا ورودی بگیره یه دونه این مثلا این دومین بی از دومین دو این از دومین یکه یه عکس از دومین دو میگه یه عکس دومین یک خب اینجا مثلا با یک و دو میدیم اینجا میاد میگه که یه اینپوت تعریف میکنه میاد میگه که ما این اینپوت رو میدیم به جنراتور یک خب یعنی این اینپوت حالا چیه
52
+
53
+ داریم تصویری که از نوع دوئه نوع دو رو میدیم جنراتور ما به ما خروجی چی میده اوت پوت جنراتور یک رو میده که از نوع در واقع یکه بعد ما میایم یه دیسکور داریم که اینم وارد کردیم این همون یکه خب این دیسکتور یک میاد به ما میگه که این خروجی که ما گرفتیم رییل یا فیک خب یعنی یک یا یک یعنی همون پچ رو به ما میده خروجی خب این میشه نکته اینه که ما توی مدل نهایی مون در نهایت ما یه دونه هم یه چیزی که داریم اینو ریلش داریم یعنی ما میدونیم که این تصویری که دادیم در واقع ریل یا فیکه یعنی ما را داریم بعد میایم این اوت که در واقع داریم ما میدونیم که این عکس که به این دادیم ریل مثلا خب میایم یه دونه ماتریس یک* یک رو میایم با این خروجی که از این داریم یعنی اون پی یک تشخیص داده که هیچ اومد صفر تشخیص داده میایم از اینا مین اسکرش میگیریم
54
+
55
+ میگیم که ما میایم حالا از نوع یک خب از نوع یک میایم میدیم به شبکه در واقع یک جنریتور مدل یک میدیم از نوع یک خروجیش باید چی باشه باید همون اوت پوت آیدی باشه که همون یک باشه حالا نکته اینه که اوت آییدی رو ما میایم با همین ورودی یعنی با همین این مقایسه میکنیم که باید در واقع با هم یکی باشن دیگه باید ارور ش می کنیم و حالا توی فوروارد مییم چیکار میکنیم ما این خروجی که داشتیم از یک این بود ما دو دادیم این شبکه خروجی به ما یک داد خب حالا نکته اینه اگه ما این یک رو دوباره بیایم به مدل دو بدیم باید خروجی دو بده حالا این مدل این دو باید با ورودی که به این یک دادیم یکی باشه این ورودی که به این دادیم این بود دیگه یعنی این
56
+
57
+ بعد با هادی با این یکی باشه این دوتا که اینجا ما اینم به عنوان ورودی داریم اینو به عنوان ورودی داریم اینم که به عنوان خروجی حساب کردیم ما با در واقع مقایسه این دوتا دوباره میشه بعد یه بارم میایم میگیم حالا ما میایم این نوع یکو میدیم به مدل جن دو جنریتور دو ما همون نوع دو تغییر حالا نوع دو رو میدیم به یک بهمون نوع یک تحویل میده این نوع یک که به ما تحویل داده با این یک اصلی که ما بهش دادیم باید مینیمم بشه ارورش این میشه چهار تا در واقع لاستر لاس ما این قسمت اصلی کد اینه اینجا متوجه بشین حالا بقیش خیلی مشابه حالا قرار میدیم روی این قسمت سوالی هست چون اینجاش خیلی اصلیش همین اوکی
58
+
59
+ که ما اینجا داریم از اینجا برداشتیم خب که با ترتیب اعمال میشه دو تا ورودی چهار خروجی این بعد این چهار تا خروجی با چهار تا خروجی لیبل های که ما داریم این چ اصلی داریم یعنی چهار تا خروجی که از کد میگیریم این چهار تا خروجی اصلی خودمون داریم میدونیم که مثلا چی مثلا اینجا این اوت دی رو ما خودمون داریم میدونیم که اگه مثلا بی دادیم این میشه ماتری ۱۶ در ۱۶ یک همش یک یا اگه فکر ۱۶ همش صفر بعد مییم خروجی که از این کد گرفتیم اینشو با اونی که
60
+
data/GAN_Lab_transcript_part2.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ همونجوری مقایسه میکنیم و با این ضریب یعنی با این نسبت‌ها اعمال می‌کنیم دیگه بعدش حالا یه تعداد فانکشن داریم که از استفاده میشه نتیجه الان همراه هم نیست حالا عکس بالا دست ماجرا درسته آره این عکس دارند این پایین عکس آره دست توش نیست
2
+
3
+ الان یعنی که الان دادم الان خروجیم خیلی خوبه خب ولی همچنان اون چیزی که میخوام نیستش دلیل هزارتا از ۱۴۱ تا دستار۹۹ تا بدون دست نه جای دیگه هم گرفتم همه جا گرفتم بعد اینا خب نکتش اینه که حالا اینو من خیلی ترین کردم خیلی کردم ولی همچنان تو اون سطحی که میخوام نرسیده باید داشته یک ماه ترین شه چون که شبکه که ما داریم لحظه این جابجا نمیشهش من
4
+
5
+ خود ترین است خب ما میایم چیکار میکنیم حالا اینجا کاری ندارم ما میایم ما یه فانکشن تعریف کردیم جنرال ریاضی نداشت این چیکار میکنه برای ما یه تعداد سمپل واقعی به صورت رندوم از دیتا ست که داریم از البته ای که حالا نوع ای دیگه برای ما یه تعداد سمپل واقعی تولید میکنه و خروجی به ما یه دونه این سمپل ها رو میده که این ایگرگ ها که این ایگرگ چیه این ایگرگ عملا همون ماتریس یک* یک ۱۶ در ۱۶ ۱۶ یک خب بعد ما میایم همینو یه بار هم برای بی انجام میدیم یعنی داده های واقعی و یک ماتریس های یک
6
+
7
+ بی میایم این داده های ریل که اینجا دادیم یعنی گرفتیم میدیم به این جنراتور بهمون فکر میده فکر ای میده و داده های بی رو میدیم به این ژنراتور یعنی ای تولید میکنه بی تولید میکنه و این هم که میشه ماتریس های که توش پر صفره دیگه بعد حالا ما از این استفاده میکنیم میایم این تیکش حالا فعلا فکر فرصت بشه بگم ما از این استفاده میکنیم چجوری ما میایم کامپوزیت ها رو ترین میکنیم به این صورت که ما قرار بود که ما به اینا دیل بدیم یه فیک بدیم ریل ها رو میدیم فیک ها را میدیم بعد حالا چیزایی که ما خودمون داریم یعنی ما میدونیم که مثلا این ایکس ریل وی این ماتریس های اند که یک* یک دیگه مثلا البته این ماسه ۱۶ در ۱۶ که پر یکه این همین تصویره اینه این همین اینه اینم که دوباره همین اینه
8
+
9
+ اینا رو بهش میدیم که در مقایسه با اون چیزایی که داخل شبکه حساب کردیم با اونا مقایسه کنه بعد اینجوری میاد کامپوزیت ترین میکنه یعنی اینجا چون ما فقط مدل ای رو اینجا گذاشته بودیم مدل میکنه بعد اینجا میاد ترین میکنه فقط روی این دیتاها ما اینو گذاشتیم توی فرم توی حلقه گذاشتیم که اون تعداد که میخوایم اینتر میشه این داخل میشه بعد همین کار برای این یکی مدل میکنیم دیگه یعنی میایم مدل بی رو حالت تعیین میکنیم به این شکل که اینجا این مدل بیت میشه از میشن بعد دیگه از اینجا به بعدش هم که دیگه اینا همه فانکشن از اینجا به بعدش دیگه فانکشن دیگه اعمال میکنیم تموم شما
10
+
11
+
12
+
data/GAN_MNIST.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/GAN_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ خوب به نام خدا دوستان عزیز و ارجمند سلام وقت همگی بخیر و شادی ما امروز می‌خوایم در مورد شبکه‌های گند صحبت کنیم جزوه‌ای که من استفاده کردم جزوه دیپ جنریتیو مادلینگ درس اینتروداکشن تو دیپ لرنینگ دانشگاه ام ای تی توسط آقای الکساندر امینی و خانمشون آوا سلیمانی ارائه میشه و خب من فقط بعضی از اسلایدهای اینا رو فقط استفاده می‌کنم اگرچه ممکنه یه سری جاها خیلی سعی کنم به زبان ساده تری یه سری چیزا رو در حد فهم خودم بیان بکنم و اگه خدا بخواد برسیم یکی دو نمونه کدم تو این زمینه براتون ران میکنیم قرار نیست این اتفاق به درد همه بخوره اما بشنوید شنیدنش خالی از لطف نیست و اینکه با دانشی که تا الان داشتید چه کارهای عجیب غریبی میشه کرد و به چه دستاوردهایی میشه رسید خب طبیعتاً من همیشه اول ماجرا
2
+
3
+ یه سایتو به نام دیسپرسنت اگزیست رو می‌خوام یه بار دیگه که قبلاً ممکنه از گذشته به خاطر داشته باشید با همدیگه مرور بکنیم یه سایتیه که وقتی واردش میشید یه سری عکس‌هایی تولید می‌کنه و با هر رفرش شما خب این عکسو عوض می‌کنه و اتفاقی که میفته اینه که هیچ کدوم از این آدما وجود خارجی ندارن خب و این عکس‌ها کاملاً در واقع به صورت فیک تولید شده و البته به جزئیات خیلی توجه شده خب این هنر در واقع ریسرس های محاسباتی و استفاده از الگوریتم های بسیار به روز بوده خواهید دید که یعنی به این نقطه ها رسیدن همچین راحت نیست ولی به هر حال مسیرش میخویم با همدیگه مرور بکنیم و عرض کردم مواردی که اینجا میبینید خب از اینجا نشأت میگیره دیپ جنریتی ماد ها میتونن کاربردهای مختلفی داشته باشند من راستشو بخواید خیلی نمیخوام بهش ورود کنم شاید پایان باز بذارم برای اینکه خودتون بهش فکر کنید فقط همین قدر
4
+
5
+ با حوزه‌های جذاب هنری و سرگرمانه اینا شروع کردن به کار و جدی شد داستانشون اما الان تو غیر حوزه‌های سرگرمی هم میشه ازشون کارکرد گرفت نمونه تولید عکس‌های فیکه ویدئوهای فیکه صداهای فیکه اینکه فلان خواننده مرحوم هنوز مثلاً داره ازش صدا میاد بیرون اینا با تکنیک‌های جنریتیوه که یک یکی از روش هاست ما میخویم در مورد اون صحبت کنیم در واقع این باز اسلاید ها با همین شروع میشه اینکه میگه فکر می‌کنید کدوم از این عکس‌ها واقعی‌ان و مشابه همین چیزی که من خدمتتون نشون دادم اینا با شبکه های جنریتی معادل شدن اگرچه نمیدونم از چه سایتی بودن و هیچکدوم واقعی نیستند یه مقدمه‌ای داره در مورد سوپروایز و آنسروایز لرنینگ و فرق اساسیش اینه که توی سوپروایز لرنینگ شما لیبلی ندارید و کاربردهایی مثل خوشه بندی یا در واقع کاهش ابعاد و اینا رو داره
6
+
7
+ و یه مقدار در واقع چیزی صحبت می‌کنه چرا باید از مادلا استفاده بشه عرض به حضور شما عرض کردم علاوه بر اون ابعاد سرگرمیش اینکه شما یه سری جاها ممکنه بتونید دادگانتونو غنی‌تر و وسیع‌تر کنید به خصوص جاهایی که مثلاً از چند تا کلاس از یکیش خیلی داده دارید و مثلاً از یکیش خیلی داده ندارید و میخوید برای منظور خاصی استفاده کنید شاید روش‌های جنریتیو یا مولد به شما کمک کنند که برای اون دسته و کلاس در واقع با داده های کمتون یا کمترتون بتونید داده جنریت کنید و بتونید بعدا کارهای مقایسه بیشتری داشته باشید بله ولی آره ولی مثلاً منظورم تو آن بالانس و غیر تراز بودن با یک دیتا ست که اون خیلی دیگه مثلا قوی تره ولی اینم در یه حدی داره که بشه کارا رو انجام داد و کاربردهای مختلفی داره مثلاً مثالی که اینجا زده گفته آقا به دیتا ست سمت چپ نگاه کنید همه مثلاً رنگ پوست تقریباً یکسان و همه
8
+
9
+ خندانه در حالی که تو واقعیت ممکنه شما رنگ پوست‌های متفاوت پوزهای صورت متفاوت و وضعیت‌های مختلفی رو ببینید یا مثلاً توی عرض به حضور شما زمینه رانندگی خودکار توسط ماشین‌های خودران نوشته خب در ۹۵ درصد مواقع دیتا ست شما جاده های آفتابی صاف بدون بارون حتی بعضاً موجود در در واقع چیز هستند بزرگراه‌ها هستند در حالی که شما ممکنه با داده های هم تو واقعیت مواجه بشید که داده های خیلی نادری باشند ولی باید سیستم شما برای اونم آموزش دیده باشه که کار بکنه و اینجا روش های جنریتیو به کار ما میاد جزوه‌ای که اینجا مشاهده می‌فرمایید دو گونه روش های جنریتی و اساساً بیان می‌کنه که هر دو اساسشون لیتنت وریبل مادلز اند یا لیت وریبل رو ترجمه میتونیم بکنیم متغیرهای نهان خب
10
+
11
+ و اساس کارشون بر اینه که به جای اینکه به یه چیز ظاهری نگاه کنید اول یه متغیر نهانیو یا پیدا بکنید یا ازش شروع بکنید که اون متغیر نهانه حالا بتونه شما رو به اون در واقع جایی که می‌خواید برسونه و چیز مهمتری باشه که روش های اتوکودر و وریonال اتوک وی یه دسته از اونان و جنریتیو ادرسریال نتورک یا گن ها یه مدل های دیگه که می‌خوایم در موردش صحبت کنیم و در هر دو شکلی که میبینید مستطیل های نارنجی رنگ که توی شکل سمت چپ وسط تصویره و تو شکل سمت راست سمت چپ پایین تصویره اون لیتنت وریبل ما هم یا متغیر نهان ما اند که حالا می‌خوایم ازش استفاده کنیم اساس کارش هم عرض به حضور شما از این نقاشی میشه مثلاً به هر حال توصیف بیشتری کرد اسم نقاشی رو اگه بذاریم راز غار این مدلیه که فرض کنید یه دیواره وجود داره که یه سری زندانی اند و
12
+
13
+ مجبورند که به این دیوار تکیه بدن و مقابلشونو نگاه کنن یه آتیشی پشت مشتا وجود داره و یه عده‌ای دارن رد میشن و یه سری چیزا دستشونه این زندانیا هیچ وقت واقعی اون ماجرا رو نمی‌بینن و فقط دارن سایه اونو روی دیوار می‌بینن ها حالا ماجرا اینه که چجوری با دیدن این سایه بشه رفت تو لیتن وریبل که اصلی ها باشن و روش بشه حرف های بیشتری زد و از اون حالا به جاهایی که میخویم برسیم خب این در واقع این چیزه برای اینه من روش های اتو ان کد رو میپرم اصلاً کاری ندارم از دلتون خواست به جزوهش نگاه کنید و وی دلتون خواست برای خودتون نگاه بندازید اگر این جزوه خیلی خلاصه است یعنی جزئیات زیادی نمیگه فیلماش هم رو یوتیوب هست درسنامه که خود خانم سلیمانی میدن تو این زمینه مطرحه اما ما می‌خوایم بریم در مورد روش های گن یا جنریتیو
14
+
15
+ سریال نتورک صحبت کنیم ادور سریال معنی حریفان بودن متخاصم نمی‌دونم دعوایی میده خوب و عنوانش مشخصه که اولاً و نتورکشم تک نتورک نتورک خب یعنی شبکه‌های حریفانه شبکه‌های متخاصم و اینجا میتونید متوجه بشید که اساس کارش اینه که ما دو تا شبکه رو بندازیم جون همدیگه خب یا حداقل دو تا شبکه رو بندازیم به جون همدیگه که بخوان با همدیگه یه رقابتی بکنن و یه چیزی رو برای ما در بیارن خب حالا بحث های علمی تخصصی پشتش وجود داره من اجازه بدید خیلی سعی کنم به زبان ساده صحبت بکنم میگه که اولا یه حس و حالی یه چیزی ازتون بپرسم ببینم قبول می‌کنید یا نه اگر قبول میکنید حالا بعدش میریم اینو میگیم فرض کنید فرض کنید من عکس تمام آدم‌های دنیا رو بگیرم مثل خ��دمون نمونه‌ش مثلاً ما بیست سی نفری که
16
+
17
+ یک صفحه دو بعدی یا توی صفحه مثلاً ۱۰۰۰۰ بعدی بیام به ازای هر کدوممون یه نقطه بزارم محور شماره عکس بنده یا از نقطه یک دو اون صفحه بتونید بعداً منو باز تولید کنید بسازید مثلاً شما بشی یکی دیگه و الی آخر حس و حالی ازتون می‌پرسم فکر می‌کنید که انسان‌های دنیا نقطه‌هاشون میشه یعنی هر کی یه جا میفته یا نه به نظرتون یه مرز پیوسته ای ممکنه با حالا مثلاً مرز خیلی عجیبی باشه از لحاظ انحنا و اینا ولی وجود داره پیوسته که همه آدم های دنیا اونجا بیفتن حس و حالتون چی میگهچ فرض کنید چرا خیلی مناسبی انتخاب شدن حس و حالتون آیا می‌پذیره که یک فضای پیوسته‌ای باشه که هر نقطه‌ای تو اون بردارید یه آدم باشه حالا یه آدم‌هایی که تا این
18
+
19
+ خلق شدن ها یا آدم‌هایی هستند که چی می‌توانستند خلق بشوند ها یه همچین چیزی و پیوسته است حس و حال آدما میگه پیوسته پرنده‌ها پیوسته باشند خب و حتی مرزهایی وجود داشته باشه که مثلاً گنجشک و کبوتر جدا بشن یا به یه پرنده هایی برسیم که یه چیزی بینابین اینان که حتی ممکنه تو واقعیت هم دیده باشیم خب و اگه فضاها رو بکشی بیا فضاهای منیفولدای خیلی خیلی خیلی عجیب پیچیده برسیم شبیه اون چیزی که سمت راست کشیده و اسمشو گذاشته اکس خب حالا ماجرا اینه که من توی روش‌های گند نمیتونم مستقیم اون منیفولد اکس رو پیدا کنم یه حقه میزنم میگم از یه نویز ساده زد شروع میکنم یه سوال پرسید چند جلسه قبل گفتم تا گن صبر کن گفت آقا ما تا الان همیشه وقتی عکس بهش میدادیم میومدیم با شبکه کوچیکش می‌کردیم به یه عصاره می‌رسیدیم آیا برعکسش میشه رفت جلو یعنی عصاره رو بدیم برسیم به عکس اصلی پاسخش اینه که بد میشه خب و
20
+
21
+ ساده عصاره که همون زد باشه و البته ما از نویز شروع می‌کنیم میریم جلو و به یه چیز پیچیده‌تر می‌رسیم که ما رو بندازه تو اون فضای ایکس آبیه که در حالت عادی نمی‌دونستیم دیستربیوشنش چطوریه یعنی با نویز تلاش می‌کنیم و یه سری سمپل خودمون رو تو اون بندازیم و انشالله که جواب بگیریم خب یه چیزی داریم یه شبکه‌ای داریم به نام شبکه جنریتور که با جین نشونش بدیم و این شبکه اصلی ماست ولی خوب ماجراش اینه که در حالت عادی اگر بخواهید از یه نویز شروع بکنید و جنریتور شما یه عکس خوب براتون تولید کنه با چی میخوید مقایسهش کنید لاس شما چه خواهد بود ها یه عکس تولید شد اون موقع بگید چیه این عکس خوبه یا بده چجوری میخوید مقایسهش کنید برای اینکه این لاسه رو یه جورایی براش بسازن از یه شبکه متقابل استفاده میکن به نام شبکه دیسکریمتور یا تمیز دهنده خب که قراره این دو تا به جون هم بیفتن و خلاف جهت همدیگه عمل کنن خب
22
+
23
+ اساس کار گنو تو این تصویر می‌بینید و کل چیزی هم که باید ببینید بدونید فقط تو همین تصویره من تلاش می‌کنم کل درس همین الان بگم مثلاً تو دو سه دقیقه خب اساس کار در واقع شبکه‌های گن این مدلیه میگه شما یه نویز دارید خب که میتونه مثلا چه میدونم اولش ۱۰ بود ۲۰ بعد داره ۲۰ تا عدد رندوم مثلاً با میانگین صفر از دیستربیوشن نرمال گوسیه با انحراف معیاری یک گزینش می‌کنید خب ۱۰ تا ۲۰ تا ۱۰۰ تا می‌دید به یه شبکه‌ای و یه جورایی مثلاً به یه عکس فرض کنید ۳۰ در ۳۰ درش میارید خروجی شبکه جی یه عکس ۳۰ که این چیه عکس فیکیه که شما تولید کردید خب و می‌خواید ببینید این چقدر خوبه یا نه طبیعتاً شبکه جی باید ترند بشه دیگه حالا بهتون میگیم باید چیکارش کنیم یه شبکه دیگه می‌سازید به نام شبکه دیسکریمتور که با دی نشونش میدن و معادل تمیز دهنده معنیشه خب این
24
+
25
+ دو گونه ورودی می‌تونه از شما بگیره یا عکس‌هایی که شما با جی تولید کردید یا عکس‌های واقعی بگیره مثلاً فرض کنید من می‌خوام یه سری کاریکاتور بکشم ۱۰۰۰ تا ۱۰ هزار تا کاریکاتور رو دارم و می‌خوام کاریکاتورهای فیک بکشم خب ۱۰۰۰۰ تا کاریکاتور به عنوان عکس ایکس ریل دارم و هر تعداد دلم بخواد که حالا ده هزار تا ۵۰۰۰ تا ۱۰۰۰ تا می‌تونم با چی جنریتور تولید کنم شبکه دیسکریمتور وظیفهش اینه که چیکار کنه عکس واقعی رو که بهش میدید بهتون بگه واقعی اند عکس فیک بهش میدید بهش میگه فیک دیسکریمتور در حالت عادی یه شبکه عادی خودمونه مثلاً کانولوشنیه چند لایه می‌زنید لایه آخرش هم سافت مکسه چیزه سیگمایده یه بله یا خیر یک یا صفره یک یعنی که چیزیدکستون رییل بوده صفر یعنی فیک بوده خب حالا دیه لحظه اول نرمال چیز شده رندوم اینشیالایز شده جی هم لحظه اول رندوم اینیشیالایز شده هدف چیه
26
+
27
+ هدف اینه که دیه تا جایی که میتونه درست بگه که فیکاوریلا کدومن هدفش اینه که دی رو گول بزنه و ایکس‌های فیکی تولید کنه که دیگه نتونه بگه فیکه و اینجا در واقع مقابله بودن و دعوا راه میفته خب حالا در مورد اینکه چه جوری ترینش کنیم صحبت می‌کنیم چون شما احتمالاً دید نداره چه‌جوری پیاده‌ش کنید خب خب ماجرا اینه که ماجرا اینه که این کلیات بحث رو شنیدیم من یه بار صحبت می‌کنم بعد حالا میریم روش جزئیات بیشتر رو نمونه و اینا می‌بینیم خب بفرمایید نه حالا فیدبک از وایz نیست داستان های که هنوز هم چلنج ها که باید بالاخره دی و جی رو چجوری آپدیت کنیم چون دو تا شبکه خب اگه بخوایم علمی صحبت بکنیم خب اگه بخوایم علمی صحبت بکنیم عرض به حضور شما که این عکس رو به خاطر بسپارید یا من
28
+
29
+ کریم بگیرم یه لحظه می‌خوام به خاطر تو میمونه یا یه بار دیگه بکشمش می‌خوام بیارم تو ویندوز ژورنال خب این عکس رو بچه‌ها یه بار دیگه یه بار دیگه فقط چشمی ببینید که یادتون باشه اینجوری بود که با نویز شروع می‌کردم نویز از جی میگذشت جیه برای من خروجی تولید میکرد معادل اون خروجی دقیقاً با همون سایزش مثلاً اگه ۲۰ در ۲۰ باشه عکس ریل داشتن و اینا رو می‌دادن به یه شبکه‌ای که فقط به من با سیگمای تهش میگفت که درسته و حالا می‌خوام در مورد این صحبت بکنم ببینید جانم در حساب میشه نه هر دو الان سوپروایز خب هر دو سوپروایزن دی بهش بله بله بهش میگیم میگیم برو ترین شو به جی حالا یه جور دیگه حرف میزنیم اجازه بدین اینو اول همین سوالی که پرسید رو بگم بعد چیز کنم ادامه بدم در مورد ریاضی صحبت کنیم ببینید این شبکه
30
+
31
+ یا شما در جا می‌خواید چیزش کنید حالا لاست فانکشن یا آبجکتیو شو بهینه کنید یا نه فرق کاس فانکشن آبجکتیو چیه آبجکتیو تا به هدف کاسپانکشن تا به هزینه است ما دوست داریم چیو چیکار کنیم کاس فانکشن مینیموم کنیم آبجکتی ماکسیموم کنیم یه راهش هم اینکه کاست آب منفی هم بگیریم دیگه ها خب حالا بستگی داره که اینجا آبجکتیو برای شما مثال بزنم یا چیز به اصطلاح کاستوم آبجکتیو دی اینه که چی عکس تشخیص بده و عکس های فیک درسته آبجکتیو میشه اینجوری نوشت حالا این اکسپکتد ولی یعنی اکسپکتیشن زمانی که داده ها رو از عکس های واقعی در میارید اینه که ال ان خروجی دی باید چی باشه باید ماکس یک بشه این آبجکتیو
32
+
33
+ آبجکتیو دیه خب این این بره به سمت یک خب عرض به حضور شما که این باز بره به سمت ماکسیمم شدن و در ضمن چه اتفاقی بیفته عکس‌هایی که از دومین p زد میان چه اتفاقی براشون میفته به سمت چی برن سفت برن یعنی لاگ یک منهای دیجی چی بشه ماکسیمم بشه درسته یعنی جی زد بره به سمت صفر ها و عرض به حضور شما که و لاگ یک منهای این بره به سمت چیز شدن حالا آبجکتیو که این ماکسیمم بشه یه همچین چیزی باید جمع این دو تا می‌خوام با هم اتفاق بیفته به سمت صفر یعنی اینکه اون چیزی که جی تولید کردم تشخیص بده فیک احس اونی که جی تولید کرده رو دی تشخیص بده که فیک خب از طرفی
34
+
35
+ عرض به حضور شما آبجکتیو جی چیه آبجکتیو جی چیه اینه که برخلاف دی یه دیدگاه اینه که بگیم ایه چیزایی که از اکسپکتیشن چیزهایی که از دومین زد برداشته یک منهای دی جی منفی ماکسیمم بشه یا یه دیدگاه اینه که بگیم لوگ دی جی ماکسیمم بشه قبوله یعنی دی جی بشه یک برای آبجکتیو جی خب گیم یا بازی یا تقابل به وجود میاد خب پارامترهای دی و جی باید چجوری توسعه پیدا کنند وقتی که با هم میبینیمشون با هم میبینینشون آبجکتیو نهایی سیستم
36
+
37
+ اینجوریه اگه میشد حل تحلیلی براش ارائه داد اینه که ما البته تحلیلی حل نمی‌کنیما باید پارامترهای شبکه دی و جی جوری انتخاب می‌شدند تتای جی رو بذارید تمام پارامترهای شبکه جی مثلاً تمام دبلیوها و یاس‌هاش و تتای دی هم بزارید تمام دبلیوها و بایاس های چی شبکه دیسکریمتور باید جوری انتخاب می‌شدند که اکسپکتیشن ایکس های واقعی وقتی میاد لاگ دی ایکس به ازای تتای دی ماکسیمم بشه و همینطور وقتی از دیستربیشن زد میاد لاگ یک منهای دی تتای دی جی تیتا زی روی زی چی بشن باز این برای دی ماکسیمم و برای جی چی بشه مینیمم بشه اگه مثلاً دی یه دونه پارامتر داشت کلا شبکه
38
+
39
+ پارامتر بود آبجکتیو رسم می‌کردید و تتای دی و تتای جی رو رسم می‌کردید کدوم نقطه نقطه جذاب ما بود یه نقطه‌ای می‌خوام که نسبت به دی ماکسیمم نسبت به جی مثلا مینیموم باشد کجا میشه از چه جنسیه نقطه زینی سدل پوینت پس آبجکتیو من اینجا به ازای یک ماکسیمم یا یک مینیمم نیست این نقطه‌های صدل پوینت جذابی رو می‌خوام پیدا کنم که این اتفاق براش بیفته خب ولی ما اینو تو واقعیت اینجوری حل نمی‌کنیم بسته حل نمی‌کنیم تو واقعیت ما چه‌جوری حل می‌کنیم تو واقعیت این کارو می‌کنیم اول جی و دی و اینشیالایز میکنیم دو تا شبکه خب که دوتاشون تو دیواره خب جی و فیکس می‌کنیم یه پارامترهاش دست نمیزنم بلدید چیکار کنید ترینبلش اگر لازم شد فالس میکنید یا اینکه اصلا وارد بازیش نمی‌کنیم به دی چی ورودی می‌دید فرض کنید که ۲۰۰ تا عکس ورودی میدید که ۱۰۰ ت
40
+
41
+ کاریکاتورهای واقعیت ۱۰۰ تاش کاریکاتورهایین که جی از زی تولید کرده مثلاً من یک بار زدو دادم چی یه بردار ده در یک از چیز نرمال سی گرفتم و به یه جی دادم که تونسته یه عکس ۳۰ در سی برام تولید کنه عکس‌های ۳۰ درسی کاریکاتورهای واقعی هم دارد خب میام چیکار میکنم به اون تقریباً عرف به اون اندازه‌ای که از ریل دارم فیک تولید می‌کنم مثلاً ۱۰۰ تا از این ۱۰۰ تا از اون لیبل چی میزنم یک میزنم لیبل واقعا صفر میزنم یعنی سوپروایزش میکنم میدم به دی میگم دی تو برو یه چیزی تنظیم بکن که اینا رو یک تشخیص بدی اینا رو صفر خب و برو جلو یا یه ای پاک یا ممکنه بیشتر برم اوکی دی تا یه جایی میبرم که او تا حد خوبی یا حد کفایت کننده روی ۲۰۰ تا داده خوب جواب بده فیکسش میکنم حالا فریزش میکنم حالا باید برم سمت جی
42
+
43
+ فریز شده حالت قبلی یعنی دی که یک بار آپدیتش کردی بده به اون دی که فریزش کردی یه لیبل بهت میده باید چند بهت بده باید یک بهت بده باید یک بهت بده پس شبکه جی باید جوری ترین بشه که وقتی تولید کرد دی جی بشه یک خب پس اون ولی دی خودش نباید پارامترهاش عوض شه که اینجا تو کدهایی که می‌نویسید میاید درسته دی جی رو حساب میکنید و لاسش با این مقایسه میکنید که یک ولی خود دی رو ترینبلش فالس میکنید تا دیگه دی آپدیت نشه جی آپدیت میشه اینجا و این برنامه رو انقدر ادامه می‌دید تا انشالله به جای خوبی برسید خب یه جایی که حس کنید داده هایی که دارید تولید میکنید معقوله جای خوب نهایی هم
44
+
45
+ دیگه نتونه بین ریل و فکر تشخیص خوبی بده و ۵۰۵۰ هم بگه که در نهایت چیز کنید به اصطلاح یعنی میگن خرش کنیم دی رو می‌خوایم فولش کنیم خب و گیجش کنیم و نتونه بفهمه چی واقعیه چی در واقع فیکه کلاً خیلی ایدئال من اینه که تمامی عکس هایی که تولید می‌کنم توسط جی دقتش بره به سمت ۱۰۰ یعنی وقتی دی جی روش اعمال میکنن ها و توی دی هم دقت ها مثلا باشه مثلا اون رندوم بگه هست یا نیست یعنی نتونه تقریباً تخمین بزنه که چه اتفاقی داره میفته الان باید هر چی از دقت صفر نتونه تشخیص بده وقتی که وقتی که میخوید دی ترین کنید ترین تمام شد تمام شده
46
+
47
+ شبکه رسیدیم به ته شبکه رسیدیم وقتی جید عکساش تولید میشه دی ۵۰۵۰ بگه فیکه یا ریال یا به اون نقطه برسه یعنی کلاً یا نه یا شاید بد گفتم شاید ۱۰۰% خودم شک کردم به سمت بالا دیگه تا حد امکان بره به سمت بالا خب و در نهایت ما دی رو میندازیم دور دی فقط نقش جی بازی کرد یعنی یک مسئله سوپروایز رو که نمیدونستیم آدما چجوری کاریکاتور چجوری اند با یه دیقه زدیم براش یه طوری تعریف کردیم دیگه پاک میکنیم میندازیم کنار و از جی استفاده میکنیم کلا از این به بعد خب این از این این کلیات ماجراست حالا یه سری مباحث پیش میاد و جزئیات حالا میخویم در مورد اینا صحبت کنیم یکی اینکه دی و جی عرفاً باید از یک چیز باشن اوردرراف باشه تعداد پارامترها متغیرهاشون نباید
48
+
49
+ خیلی قوی یا جی خیلی قوی باشه مثل یک معلم و شاگرد خب اگه شما یک معلم خیلی خیلی خیلی قوی سختگیر انتخاب بکنید مثلاً یه میلیون تا پارامتر داشته باشه ۵۰ هزار تا احتمال داره هیچ‌وقت اون بهش نرسه خب اینی که دی و چند تا ایپاک بدیم جی و چند تا ایپاک بدیم یعنی من که یه دور دی رو دارم آپدیت می‌کنم بعد میرم جی دوباره میرم دی دوباره جی چیکار کنم این واقعا محل یعنی چیز ها جای بحث داره هنوز که هنوزه دارن روش کار می‌کنن یه سری مقالات نوشتن یه عده نوشتن یه مرزی بزار خیلی نرید جلوتر یه عده مثلا نه پنج پاک ده پاک میرن تا دیه به اندازه خوبی قوی بشه چون لااقل ایکس که بتونه بگه یکه چون وقتی اولش رندوم ایکس نمیتونه بگه یک ها و بعدش بیاین سمت چی اینا جای اعرابه و خیلی جا بازی داره یعنی برخلاف قبلیا هایپر پارامترهایی که دستتونن و حقه هایی که باید بزنید تا به نتایج خوب برسید خیلی زیادترن برای بخواید یک ممکنه به علت محدودیت منابع محاسباتی و دو به علت پیچ
50
+
51
+ از آب و گل درش بیارید این طرحتونو خوب و ولی به هر حال این اتفاقی که پشت ماجرا میفته خب این بفرما هر وقتی اولش حداقل درست کنه بعد با هم ترین یعنی چی اگه بخواید دو خب یعنی اگه بخوای آبج آبی من بزاری باید حقه کد زنی بلد باشه که اینو برات پیدا کنه خب ��از دوباره اینم دو مرحله اش میکنه تو واقعیت درسته یه تابعی مینویسیم که ترینه که من اتفاقاً نمونه کدی که براتون آوردم همینه یه تابع تهش دادیم دستی نوشتیم ترین
52
+
53
+ ولی اون دو مرحله‌ای میاد می‌کنه یعنی بالاخره یه مرحله اول جنریتور و میچرخه ولی من با هم دیدنشو با هم بودنش که همزمان دقیقاً همین آبی رو که نوشته بودم شاید مثلا اینم الان روش های به روزترشه خب داره استفاده میکنه اشکال هر کسی از دیت نه میدونم ولی نگاه کنید زمانی الگویی که گفتم اول که میخوید بدید دی تعیین کنه ما با جی ثابت یه سری عکس تولید میکنیم میدیم به دی اینقدر دی رو میزنیم تو سر کلش که قوی شو آقا ریل ها را ریل واقعا تشخیص بده چون حالا فیک ها رو که خب رندوم اولش میگه ولی احتمالا ریل ها رو بتونه بگه یکم احتمال داره واقعا باز فیک ها رو راحت تر بتونه بگه صفر چون خیلی فرق میکنه بعدش چیکار می‌کنید حالا دیگه قوی
54
+
55
+ رندوم خودش یه خروجی تولید می‌کنید بعد خودش که لاست نداره میدید به دی دی باید اینو یک تشخیص بده میگیم جی و جوری تغییر بده که خروجی سبب بشه دی اینو یک تشخیص اینقدی میرید جلو تا به همون عرض کردم به یه نقطه آره نمیدونم موازی یا نه شاید مثلاً از دید من سری یعنی یه جی و فریز کردید دی رو میبرید جلو یه جا دی و فریز میکنید جی اگر قوی میشن نمیدونم خب اینجا همون جایی که احتمالا مقالات میگن پاک از اون یعنی نیازی نیست خیلی شاید همین حرفی که ما زدیم و بیان میکنه میگه آقا اول جنریتور شما چیز میکنه داده های
56
+
57
+ برداشته که خیلی پرت و پلان بعد چند تا داده واقعی نشونش میدید و دیسکریم میاد ترین میشه انقدی ترین میشه که سبزها رو یک و نارنجی‌ها رو چی احتمالشو صفر تشخیص بده بعد جنریتور حالا نوبت جنریتور قوی بشه صورتیاشو میاد نزدیکتر به سبزه برمی‌داره خب چون فهمیده حالا دی قوی بغلشه بعد انقدری میزنه تو سر کله خودش که سوئیچ میکنه و فلان فلان در نهایت داده‌هاش انقدی می‌افتن تو هم یعنی جنریتور شما اینقدر قوی میشه که وقتی داده های خوبی انتخاب میکنه قاطی سبزها اند و دیگه دیسکتور کلا کم میاره و الی آخر و در نهایت هم چیکار می‌کنید در نهایت هم بعد از اینکه به نقطه خوب رسید رو میندازید دور کلا با جنریتور به زندگیتون ادامه می‌دید خب استفاده نکنید مدل های ترین شده دیگران استفاده کنیم مثلا موبایل
58
+
59
+ موبایل آیا کاریکاتور یک تشخیص میده یا نه یعنی احتمال از صفر صفر اینشیالایزش کنید واقعا اگر شبکه خوبی دارید خوب استفاده کنید ولی ماجرا اینه که سوال من دقت کنید بچه ها سوال من الان این بود یه مشتی کاریکاتور دارم بهش گفتم تو هم برای من کاریکاتور بکش ولی فعلا بهش نگفتم کاریکاتور چی بکش و اینا مسائل جداین یکی یکی میخوام بهش وارد شم خب و اینی که دیسکریمتور باید بتونه کاریکاتورهای واقعی رو بگه کاریکاتورن همون اولش و
60
+
data/GAN_transcript_part2.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ نویز بدیم عکس‌های واقعی نه عکس عکس تولید میکنه چی میخوای مقایسه کنی لاست چیه لاست شبکه آپدیت کنم صحبت کنم جی چجوری اینجوریه ما تا حالا همش اینجوری بودیم خب ما همه از بزرگ به کوچک میومدیم الان چجوری از کوچک به بزرگ بریم در موردش صحبت کنیم هر چیز برای هر عکس نویزی فرض کنید این شکلی درست نه اینجوریه که کلا مثلا شما یه عکس ۳۰ صد در صد میخوای بسازی تو خروجی جی هیچ لزومی نداره اولش ۳۰ در ۳۰ تا یعنی ۹۰۰ تا عدد رندوم انتخاب کنیم تو یک چیز کوچک مثلا ده تایی ۲۰ تایی ۱۰۰ تایی انتخاب می‌کنی بعد با آپولوشن ها اینا رو بزرگ میک تا برسی به ۳۰ درصد خب این ۳۰ رو حالا رسیدی میخوای شبکه تو آپدیت کنی باید یه لاس داشته باشی لاس فانکشن چی خواهد بود من عرض کردم دی فقط در واقع کمکی لاس
2
+
3
+ که من دی جی رو پیدا کنم و بهش بگم این باید جی باید تو انقدی قوی بشه که دی جی یک باشد خب بچه‌ها این شهود گرافیکی بهتون می‌خواد بده میگه که زد که همون لیتنت اسپیس باشه دنیای بعضاً قابل تفسیر و جذابیه خب میگه یه نقطه توش انتخاب کنید فرض کنید به یه جنریتور خیلی خوب و قوی رسیدیم که میتونه پرنده تولید کنه یه یه نقطه تو فرض کنید اینجا دو بعدی بوده از یه نرمیشن دو بعدی یه نقطه انتخاب میکنید و اینو میدید به جیتون و یه عکس پرنده براتون تولید میکنه که الان دارید پرنده رو میبینید خب میگه یه زد دیگه تولید کنید یه پرنده دیگه میشه قبلی مثلا چه میدونم قد بلند بود سیاه بود این جدید قد کوتاه رنگی رنگی خب میگه که فضای بین این زدهایی که اول همدیگه رو به هم وصل میکن هم خب وقتی یه زدی برداری بدی به
4
+
5
+ خوب ترین شده باشه باز همون داستان منیفول پیوسته است که خودتون حس و حالتون گفتید و باز میره پرنده تولید میکنه ولی پرنده‌ها شروع می‌کنه عکسشون یکی یکی عوض شدن و یه جایی به هم تبدیل میشن از پایین سمت چپ به پایین سمت راست نگاه کنید پایین سمت چپ و پایین سمت راست دو لبه بوممونن یکم که مثلاً زدشو تغییر دادم به سمت اون یکی حرکت کردم پرنده مثلاً قدش داره کوچیک‌تر میشه بعضی روش داره به سمت شما برمیگرده کم کم درسته بعد تو اون وسطیه یه عکس البته یک نامناسبه خیلی وسطی این چهارمی از سمت چپ نامناسب شده پنجمی از سمت چپ یا چهارمی از سمت راست در واقع یه پرنده قد کوتاه سیاه شده که داره به سمت چپ نگاه میکنه و بعدش که رفته جلوتر چی شده رنگی هم شده که داره به سمت چپ نگاه میکنه یعنی این مسیر زده قابل راه رفتنه قابل تفسیره خب و این لیتنت اسپیس خیلی جذاب و خوبیه که
6
+
7
+ داستانی که گفتم آدم‌های دنیا رو ممکنه بتونیم کلی آدم دیگه که الان وجود نداشتن چیکار کنید پیدا بکنید خب این ماجرای اول که ما فقط عرض کردیم مثلاً یه مسئله‌ای از این جنس داشتیم یه دسته کاریکاتور داریم بهش می‌گیم یه شبکه جنریتور می‌خوام که کاریکاتور برام بکشه ولی بهش نگفتم کاریکاتور چی بکشه خب یا یه مشت صدا و ویس دارم از فلان خواننده میگن آقا یه ویس از این خانم خواننده برام تولید کن ولی دیگه نمیدونم محتواش چی باشه درسته و فقط قراره صدا رو رعایت کنه اما گام های بعدی که تو واقعیت اتفاق میفته و خدمتتون بگم اولین ماجرا اینه که این عکس های که دیدید تولید کرده بودن مثلاً فرض کنید هزار در هزار پیکسل خب و خیلی عکسای باکیفیتی بودن که چه میدونم این دیسپ پرسنت اگزیستر تولید میکنه این عکسایی نیست که شما بتونید با یه شبکه گن عادی ببرید جلو قبل این ادامه بدم بچه‌ها در مورد چی صحبت بکنم
8
+
9
+ بزرگش کنم خب یه ماژولی توی چیز وجود داره تو کراس خب به نام عرض به حضور شما ترانسپوز کامپولوشن ترنسپوز کان بعد تایپ کردن حالا تو ترانسپوز لیر مثلا خب این اینجوریه که می‌نویسید کان دو دی ترنسپوز و از شما چی میگیره شبیه عادی فیلتر میگیره دو نوع پدینگ دو نوع پدینگ داره عرض به حضور شما که درست دارم میگم دیگه نه یه پدینگ میتونن حالا دو نوع پدینگ کلا براشون تعریف میشه من سعی میکنم نشونتون بدم حالا دلتون خواست برید اینجا رو نگاه کنید چون چاره‌ای ندارید که از آپشن یا ترانسشن استفاده بکنید تا زدتون که اول مثلاً ۱۰ در یک یا پنج در پنجه باید بیارید به مثلاً یه
10
+
11
+ سی در سی تبدیلش کنید و خیلی هم لازمه که تنظیم کنید عکس دقیق بزرگ بشه یعنی اگه عکس ۳۰ در سیتون خاص بشه ۴۰ در ۴۰ شما باید تو پارامترهای کانولوشن ترانسپوزتون دست ببرید خب من ترانس ترنس پوزد کانولوشن بیارم عرض به حضور شما که یه سایت خیلی خوبی بود یه فرومی بود فیلتر یعنی الان باز نمیشه چند تا چیز دیگه رو بیارم بهتون نشون بدم خدمتتون عارضم که یه عکس خوبی انتخاب کنم ببینم دارم می‌گردم خب آها این مثلاً یکیش خب بچه‌ها عکس سمت چپ به عکس سمت راست نگاه کنید عکس شما اولش دو در دو مثلاً زد صدای شما اند خب یه فیلتر سه در سه روش انداختید و می‌خواید ترنسپوز کامولوشن بزنید فعلا فرض کنید
12
+
13
+ فعلاً فرض کنید که پدینگ و اینایی هم نداریم خب چه جوری رقم میخوره میگه بیا خونه اولشو خونه اول سمت چپیه رو در تک تک سه در سه ضرب کن حله بزار توی پک پچ سه درسه بالای سمت راستتون که عکس خروجیتون عکس خروجیم الان قراره گنده‌تر از ورودیم بشه بغلیاشو چه‌جوری حساب می‌کنید خونه دومه که آبی نشونش داده رو چیکار کن فکر می‌کنی دوباره در هر نقطه ضرب کن کجا بنویس دومی اولین ستون اینو بزار توی ستون دوم اون عکسه و با درای قبلیش جمع بزن خب دومیشو بزار توی ستون سمت ستون سوم عکس سمت راسته و باز با درایاک قبلی ناشی از قرمز جمع بزن ستون آخر که چهارمش به دست میاد چیه جدیده دیگه هیچکی اورل نداشته حله متوجه شدی چی
14
+
15
+ عکس خوب پیدا کنم دیگه خب اینجا الان اینجوری نگاه کنید اول خونه قرمزه رو یه سه در سه می‌سازید استراید دو دارید دو تا می‌پرید جلو دومیه رو آبیه رو در سه در سه ضرب می‌کنید ۹ تا عدد دارید نه تا رو می‌ذارید روی عکس جدیده فقط اگه زیرش عکس داده قدیمی داشتید چیکار میکنید جمع میزنید بعد دوباره دو تا میاید پایین همین کار برای دوت خونه پایینی اینم انجام می‌دید حالا چه اتفاقایی میفته کانولوشن چیز ترانسپوز کانولوشن رو باید بازش بکنیم بفرمایید شما خارج بشه بذار بشه دیگه جی قراره دیگه اینقدر بره قوی بشه که بره شما رو مپ کنه از فضای گاوصی به یه فضای دیستربیشن جدیدی که اصلا نرمال نیست مثلاً ممکنه دیستربیشن آدم
16
+
17
+ دستگاه ۱۰ هزار بعدی واقعا نرمال نباشه با یه چیز پیچیده عجیب غریب منیفولد عجیب غریبی باشه خب و این اتفاق این کارو برای ما انجام بده دیگه اگه هرچی هم دیتا ست غنی‌تر باشه این چیز میکنه این شانس اینو داره که هی بره بیشتر بگرده و جیشو قوی و قوی تر بکنه و به اون منیفولده نزدیکتر بشه بچه‌ها این می‌تونید کانولوشن ترنسپوز چند تا اتفاق میفته من همینجوری بیان کنم دو نوع پدینگ داره یه پدیده داره وقتی میزنن برخف پددای قبلی که بود یه صفر اضافه میکردیم یه سطر و ستون از هر طرف عکس تولیدی کم میکنه این یه نوع پدینگشه یه پدینگ دیگه هم داره که یه ستون صفر و یه سطر صفر به سمت راست و چپ عکس تولیدی اضافه میکنه خب نه دور تا دوررا یه ستون سمت راست عکس یه ستون پایینش حالا یه نقطه جدید خودم دارم دیگه صفر اضافه میکنه این
18
+
19
+ تو فیلم‌های علی قدمی که توضیح داده از پارسال هست من چیز داریم چون این یکی از این فروم‌هایی که اینو داره راستشو بخواید فیلتره و من الان نمیتونم تو گوگل عکسشو پیدا کنم که بهتون نشون بدم همه حالت‌هاشو نوشته خب همه حالت‌های مختلفشو نوشته این آها اینه پیداش کردم اگه بقیش هم بیاره این مثلاً بچه‌ها نگاه کنید عکس سبزه اولیه آبی تولید شده آبی کمرنگ کله آبی پررنگ تولیدیه الان کل سه درصد استراید یک پدینگ صفره چی باید تولید کنه چند در چند دو در دو بهش بده چند در چند بهتون بده باید چهار در چهار بده منطقی نیست انشالله که هست درسته این اگه ویزیت بزنم این سایت خوب است که میخوام فکر کنم بالا نمیاد جانم با فیلتره هیچی حالا برید سایت برید بقیشو نگاه کنید خب لطفاً
20
+
21
+ چیزتون استرایدتون چند باشه پدینگ داشته باشید یا نه عرض به حضور شما در مورد پدینگ و اوت پوت پدینگ صحبت می‌کنه پدینگه اونیه که یه لایه صفر از خروجی کم کن مثلاً پدینگ یک باشه باید خروجی الان اون چند در چند بشه به جای چهار در چهار دو در دو بشه یعنی یه لایه از صفر یه لایه کلاً از سطرها و ستون ها از دو طرف کم میکنه یعنی دو تا ستون کم میشه اگه پدگه یک باشه اگه اوت پوت پدگه یک باشه چیکار میکنه یه لایه صفر به سمت راست یه لایه صفر به پایین عکس آبی اضافه میکنه یعنی میشه ۵ در ۵ آبی پر رنگه جان نه برای اوت پوت پدینگ اضافه میکنه پینگ عادی حذف میکنه دوتاشو داره این کاربردهایی داره که چیز کنید چون سایزتون تنظیم کنید اینجوری که باز باید بریم جزئیاتشو بخونیم الان خودمم نمیدونم ولی این شانس
22
+
23
+ چالش‌های کلاً شبکه‌های گن اینه که شما باید همیشه خروجیتون جوری تنظیم بشه که با ورودی چیزتون ترینتون یکی باشه با ورودی دیتا ست اصلی‌تون دقیقاً باید یکی باشه خب بچه‌ها تا حالا داشتیم در مورد گن عادی صحبت می‌کردیم اولین چالشی که وجود داشت این بود که گن عادی نمی‌تونست یه عکس هزار در هزار رو به راحتی براتون اینجوری تولید کنه یه ایده اومد به نام پراگرسیو گروینگس یا بهش میگفتن که اینجوری بود که از عکس چهار در چهار شروع می‌کرد اول دیسکریمتور و جنریترش جوری ترین میکرد که چهار در چهار رو بتونه فیک و ریلش از هم تشخیص بده بعد هشت ولی آخر بزرگش می‌کرد تا در نهایت این چند مرحله گنش آورد بالا تا بتونه به چی۲۴ در۲۴ برسه که هیچ بعید نیست که اگر این در واقع دیسپرسنت نات اگزیست اساس کارش دیفیوژن نباشه و گن باشه هیچ بعید نیست که این کارو کرده خب
24
+
25
+ عرض به خدمت شما ماجرای بعدی که یه سایت دیگه‌ای بود نمی‌دونم بتونم پیداش کنم اینه که دش بینش وجود داره این یه سایت دیگه است ماجرای بعدی شبکه‌های ۳۰ گنگ یا کاندیشن که این خیلی جذابه ببخشید داره طولانی میشه من آقای بابایی هم گفتم زحمت بکشن برای سایکل گند بیان اون دیگه اند چیزیه که می‌خوام بهتون بگیم دیگه بیشتر از این خودمون خودم دیگه من سوادشو ندارم خیلی هم جذاب کاندیشنال گن یه مقدار صبور باشید بخاطر همین عرض می‌کنم کاندیشنال گن حرفش اینه که شما حق دارید تعیین کنید که خانم میخوید تولید کنید یا آقا خب میخوای سنش تو چه رده‌ای باشه م��خوای جنسی میخوای ملیتش چی باشه و این رفرش بکنیم و چرا ایمیل زدم الان تصاویر قابل پخش نباشه خب عرض به حضور شما میل اینو زدیم و خب
26
+
27
+ قبلا بهتون گفتم اگر بیاید نژادشو چیز بزنید میدلست بزنید ده بار رفرش کنید ۶ تاشونو میگید من دیدم تو دانشگاه تو خیابون این پسر خالم اینجوریه یعنی خیلی بعضیاشون خودی‌اند حالا ببینم چی در میاد نه نیست آره می‌تونیم بزنیم ولی ولی چند تا بزنم میدلست حالا جالبه من سری قبلی تو سه تای اول دو تا بچه ها خدایی به نظر من معتقدم هممون اینو دیدیم خب یه همچین چیزی خب بحث سیگن یا کاندیشنال گنج چیه کاندیشنال گن حرفش اینه که تو قبلی من بهتون گفتم کاریکاتور بکش دفعه بعدی میگم کاریکاتور منو بکش خب حالا باید چیکار کنیم که اینو بفهمه چیکار کنم که مرد بکشه چیکار کنم که ایشین بکشه میگه شما باید یه چیزی به نام
28
+
29
+ کاندیشن باشه رو یه جایی تو شبکه جی و دی کانکت یا فیوز کنید با داده‌ها مثلاً کجا همون لایه اول فرض کنید که نویز شما ۱۰ در یک بوده ۴ تای دیگه هم شما اضافه کن که چهار تا صفر و یک باشه مثلاً صفر اولش نماد اینکه آقا یا خانوم صفر دومش نماد اینکه مثلاً رده سنی چند مثلا رده سنی چه می‌دونم فلانی و فلان اینجوری بنویسید یا ایشین باشه یا نباشه و الی آخر اینجوری اضافه کنید می‌تونم لایه اول نباشه بره وسطای مثلاً شبکه جی چون سه لایه است لایه دومش بره مثلاً یه سی از این جنسی کانکت بشه یا جمع بشه یا مثلاً فرض کنید که می‌خواید عکس شما رو بدید کاریکاتور بکشه خب عکس من عکس صد درص مثلاً یه ۲۰۰ در دویسته میام چیکارش میکنم اول برای خودم از یه کانولوشن رد میکنم تا به یه عصاره مثلاً ۵۰ تایی برسه این ۵۰ تایی رو یا میام با نویز لایه اولش یا نه با دوباره
30
+
31
+ ادامه بده یعنی یادش بمونه که یه عصاره‌ای از عکس منم دریافت کرده بفرمایید همین اتفاق است مثلا اولین توصیه‌ای که می‌کنن اینه که فیچرهاتون کنید خونه زد اضافه کنید مثلا بگی یک نماد عکس منه دو نماد عکس فلانی تا ۱۵ برم خب این یادش میره بعداً آره بهتره که وان هات بیاد بهتره که تعدادش مثلا اگه میشه از یک بیشتر باشه مثلاً اگه عکس میخوید بهش بدید عکس از یه کانولوشن عادی خودمون دو سه لایه رد کن عصاره رو بهش بده یا جمع بزن همین که میگی مثل پوزیشنال ام مثلا یه صد در یک از عصاره عکس خودت تولید کن تو شبکه هم رفتی جلو به یه ساعت در یک رسید این دو تا
32
+
33
+ اینجوری اعمال کن حالا اینو کجاها دیدید کاندیشن اعمال شه تو این ابزارهای که اینور اونور دارید میبینید برعکسشه اینکه من اگه تایپ کنم یک جنگل فلان برام بکش خب این کاندیشن باید بهش بدی دیگه جنگل فلانو که حالا این کپشن چیست کاندیشنش از جنس تکسته حقه داره که چجوری بیاری تو این فضای زده و کانکت کنید ولی بالاخره اونم همینه باید از یه شبکه بگذرونید یه امبدینگ خوبی ازش در بیاد اون امبگه رو بدید به زد و بعد بره تو جنریتور و جنریتور بعداً بره اینا رو بسازه جان عوض نه میتونه تو لاست نیاد میتونیم لاس دستی ما میتونیم چیزای دیگه هم اضافه کنیم بهت میگم آره مثلا اگر میخوای منظورت اینه که
34
+
35
+ عکسی که جنریتور تولید کرده رو پیکسل وایز از مثلاً عکس خودم کم کنم بعد بگم فلان داشته نگاه کن هم دارم به جی میدم هم به دی میتونم بدم کاندیشن رو دو جا دارم بهش میدم که شبکه یاد بگیره اینا رو رعایت کرده میتونید شما دست ببرید تو لاس ولی ماجرا اینه که من فقط سوال درست متوجه شده باشم یکی از مشکلات کلاً شبکه گن اینه که تهش حتما باید یک انسان یعنی شما باید نظر بده که این خوب بود یا نبود یعنی اون ممکنه مثلاً به این شرط چیزه رسیده باشه که جی به نظرتون دی جی مثلاً دقتش صده ولی نگاه میکن چیز خوبی نیست و نمیدونید مگه دی یا جی چه تابعی داشتن که دی جی داره یک میده یادتونه مثلاً یه سری چیز میذاشتی نویز میذاشت میدادیم به ام نیست بعد مثلا میگفت چهار نوشتی همچین
36
+
37
+ بله نه این نیست ولی ولی مثلا الان سوال داره به این عوض میشه که فرض کنید مثلا آیا این کاریکاتور من هست یا نیست ولی کاریکاتور من بودنشو خدمتتون عارضم که فقط یه چیزی آها اجازه اجازه اجازه اجازه بده اینا برن جلوتر میخوام بگم ممکنه پرد باشه خب یعنی شما الان متوجه شدم نگاه کن برای اینکه بدونم این کاریکاتور علی رو کشیده یا نه قبلش باید کاریکاتور محمد و عکس ممد بهش بدن بله پیر بهش بدم خب درست میگم بعد عکس محمد و بدم به جی کاریکاتورشو تولید
38
+
39
+ میزاره فقط اینه که فقط اینه که بگم کاریکاتور علی رو بکش خب قبلش من تو ترینینگ چی داشتم ببینید شبکه بعدی که معرفی میکنه و سال ۲۰۱۷ حدوداً اومد یه پیپری بود اسمش برای خودم نوشتم عرض به حضور شما که اسم پیپر بودشن یه شبکه بود که مثلا چیز رو میداد همه خیلی عکسای مختلفی پیر داشت جفتی مثلا عکس واقعی خیابونو داشت عکس فرض کنید که این سیستم این سیمنتیشنش هم داشت که مثلاً این چیزه جاده است یا فلان یه دونه داشت عکس هوایی واقعی و اون نقشه هست که خلاصه شدشو بهمون میدن خب اینا رو پردش
40
+
41
+ ترین پردش موجود بود جفت اینا فکر می‌کنم تو ترین میرن خب یعنی مثلاً میگم کاریکاتور ممد و ممد اگه من موجود دارم جفتش میره تو ترین فقط اینکه چه جوری میره یه لحظه الان شک دارم که مثلا باید بگه اینا پرت شک کردم این تیکشو نمیگم آره آره فیک هست یا نیست حالا میخوام آره اگر قرار باشه مثلا شما محمد شما اگه میدونید بگو کاندیشن بگو این که مثلا فرض کن من میخوام آقا میخوام بگم کاریکاتور منو بکش خب تو ترین چی بهش دادم شما بله عکس خروجی
42
+
43
+ من عکس ممد و کاریکاتور ممدو دارم عکس ممدو میدم به گنم به جنریتیوم تا فیک تولید کنه فیک ممدو تولید کنه کاریکاتور ممدم بهش میدم میگم این دوتا رو با هم مقایسه کن ببینم خودش هست یا نیست که اینجا به لاسم مثلاً کاری که میتونم بکنم پیکسل وایز بگم بیاد پیکسل تولید شده عکس خودتو با پیکسل کارییکاتور واقعی از هم کم کن به توان دو برسون جمع اینو بگیر اینو مینیمایز کن خب درست گفتم یعنی پس پس شما پرد استفاده کردید فرد نفهمیده چرا دیگه الان فهمید که نگاه کن عکس عکس محمد که دادیم به جنریتور رفت یه فیکی از یه فیکی تولید کرد بعد واقعی محمد پیرد محمد هم داشتم که کاریکاتورش بود این دو تا رو با هم مقایسه کرد داد به دی تو لاس دی مثلاً فرض کن که پیکسل وایز هم
44
+
45
+ پس اون حالتش باید سه دسته باشه فیک واقعیه و مرد واقعیه آها یعنی باید خوب شاید شما دیگه اینو با یه شبکه نرید یعنی مثلا شاید شبکه های تو در توش کنند نمیدونم خوب ولی اینکه ما باید کاری کنیم که شبکه‌ای که بخوایم مرد تولید کنیم با کاندیشن مرد فقط دیگه بره کان یعنی مرد بودن عکس و چک کنه همزمان اینکه فیک هست یا ریله یعنی نیاد دیگه به قول شما چند حالتش کنه دیگه اضافه میشه آره لاس که اضافه میکن چون الان دستی کاری که آقای بابایی میخواد براتون نشون بده که سایکل حالت خفن ترین حالت ممکنه تو لاسش چند تا جم��ه است خب حالا این تیکشو بچه‌ها نمی‌دونم باید
46
+
47
+ به نظرم میاد تو کاندیشنال گن به نظرم میاد که حالتی که پرده اینه که شما به اصطلاح صورت مسئله رو گفتیم عکس واقعی رو میدیم کاریکاتور ما رو بکشه شما تو ترین هم دارید مثلاً ۱۰ هزار تا عکس واقعی دارید که کاریکاتور معادلش موجوده عکس واقعیتون رو می‌دید به جنریتورش جنریتور یه کاریکاتوری براتون می‌کشه کاریکاتور رو با کاریکاتور واقعی میدید به دیسکریمتور یه لاسی براش مینویسید که مثلا این باید پیکسل وایز یکی باشن یا نباش مثلا یه همچین چیزی و عرض به حضور شما که به جایی که دیگه به نقطه خوبی رسید حالا دیگه عکس خودتونو بدید انشالله چی کاریکاتور شما رو تولید کرده خب پس اینم شد کاندیشنال گن که این کار هم برنده شد مثلا اینا دسته هایی که داشتم مثلا عکس های واقعی عکس هوایی مثلاً واقعی رو میداده باید هواییش میکشیده هوایی رو می‌داده باید واقعیشو میکشیده و میتونسته مادامی که
48
+
49
+ غنی بوده شبکه‌های گنی داشته که این کارو کرده و آخرین چیزی که می‌خوایم در موردش براتون صحبت کنیم یه چیزی به نام سایکل خب سایکل گن دیگه اون چیزیه که تهیه که ما بلدیم شما پرت عکس ندارید یه مشتی کاریکاتور دارید یه مشتی عکس واقعی دارید که اینا اصلاً دو به دو هم یکی نیستند یعنی لزوماً کاریکاتور براش عکس واقعی نیست چون عکس واقعی براش کاریکاتوری نیست یه مشتی اینجا دارید یه مشت اینجا مثلاً فرض کنید یه مشت عکس اسب دارید یه مشتی گورخر خب و می‌خواید کاری کنید که هر جا این اسبه تو عکس واقعیتون گورخرش کنه یا گورخره اسبش کنه حالا یکیشو انجام بده براتون به این کار میگن سایکل نمونه واقعیش هم کجا بوده در واقع اونجایی بوده که الکساندر امینی نمیدونم جلسه اولشو دیدید یا نه که یه ویدوی فیک از اوباما میاره هم تصویری هم صوتی ایشون با سایکل گن برید جلو این داده های صوتی خودشو گرفته که میشه پایینی داداش صوتشو که داره اسپ
50
+
51
+ عرض به حضور شما میره چیکار میکنه فیک اوباما رو تولید می‌کنه خب و بعد فیک اون اسپکتروگرم اوباما رو صوتیش می‌کنه دیگه ما بشنویم همین کارو برای تصویر می‌تونه انجام بده و اینجا میتونید همون دیفیک برید دیگه این جای اون بذاره اونا جای این بذاره خب میدونم دارید به چه چیزهایی شومی فکر می‌کنید ولی ولی کلا این با سایکلگن انجام میشه اساس کار سایکلگن باحاله اینو ببینید میگه چیکار کنیم ببین مثلاً من فرض کنید که از دنیا عکس واقعی یه چیزایی دارم کاریکاتور یه چیزایی دو به دو یکی نیستند این عکس رو بدم کاریکاتور بکشه کاریکاتور بدم عکس واقعیش میکشه یا مثلا عکس زمستونو بهار رو به اندازه کافی دارم خب ولی نه مثلا از یه منطقه ندارم هم زمستون هم میخوام اینجا زمستون اینو بدم بهار برام بکشه همونجا رو یا بالعکس اینا رو دیدید دیگه تو ای پی از پای مختلف اینا سایک چجوری انجام میشن اولاً اینجا
52
+
53
+ در واقع دو تا شبکه حالت دوتا دو نوع شبکه گن داره که در کل ۴ تا در واقع شبکه نتورک نورال نتورکی داره شما باید ترین کنید یه شبکه شبکه‌ای که دومین ایکس رو ببره به دومین وای یعنی مثلاً فرض کنید اگه عکس واقعی رو ببره به کاریکاتورها خب اسم جنریتورشو گذاشته جی و دیسکریمتوری که تشخیص بده شما رفتید تو اونو گذاشتید دیوار یه شبکه دیگه میسازه که وای رو براتون بیاره به اکس به اسم جنریتورشو گذاشته اف و دیسکریمتورشو گذاشته dx چهار تا در واقع شبکه باید ترین کنید که بتونید از این برید رویای ما اینه که اف جیx چی باشد اف جیx چی بشه رویای ما اینه که بشه اکس ها یعنی اینکه یک بار من از ایکس برم تو وای با جی بعد با
54
+
55
+ حالا برای اینکه اینو چیزشو بنویسن در واقع لاس فانکشنشو بنویسن عرض به حضور شما که در حالت عمومی سه تا بخش لاس داره یه بخش لاست داره برای شبکه جنریتور اولی که توش جی و دی وای میاد میشه مشابه اونی که من اونجا براتون نوشتم یه لاست داره برای اینکه چی لاس اول چیو داره میگه لاس اول اینو میگه که وقتی جی ایکس تولید شد چقدر از دومین وای چقدر به دومین وای شبیه شبکه گول میخوره حس میکنه از وای یه لاس می‌نویسه که جمع میزنه باهاش که شبیه باز دوباره لاس گنه این دفعه برای f و دی اکس مینویسه که شبکه ببین چقدر تولیدی های وای هست دومین اکسه و یه لاس نهایی داره که میگه چقدر اف جی اف در واقع جی وای شده اکس و چقدر جی ببخشید چی گفتم جی اکس افش
56
+
57
+ و چقدر جی اف اکس بشه وای اف جی و اینکه اینم بشه چیکار کنند نورم توان دو یا نور یکشو بگیرن دیگه درسته اینا رو چهار تاشو با مثلاً همه این که گفتم با هم جمع میزنند و شبکه رو تریل میکن و تهش اگه این کارو بکنید که محمد یه نمونه کد برایون آورده سایکل این کار میکنه حالا نمونه اش براتون میگه و هدفگذاریش اینه عادی شما از نویز زد شروع میکنید میرید تو دومین وای توی شبکه های سایکل از یه جای منیفولد پیچیده ایکس شروع می‌کنید می‌خواید برید به وای یا برگردید که نمونش همون ترنسپورینگ اسپیچ بوده که خود الکساندر امینی این کار انجام میده و فیک خودش صحبت کرده و خودش از خودش فیلم گرفته بعداً ویدئوی فیک اوباما تولید شده که هم در واقع تصویری بتونی
58
+
59
+ با حالت چهره خودت اونو بسازی هم صدات اون باشه که الان تعداد اپ‌های زیادی هستند که این کارو می‌کنن بچه‌ها تئوری‌های ما در مورد گند تمام شد یعنی بیشتر از این راستشو بخواید احتمالاً خودمم بلد نیستم خب ولی در مورد گند چند تا ماجرا وجود داره اولاً سختی همگرایی داره به شدت خب یعنی ممکنه اصلاً هیچ‌وقت همگرا نشید دوم اینه که ممکنه منابع محاسباتی زیادی بخواد یعنی مثلاً چیزی که محمد براتون میاره الان با ۲۰۰ ای پاک تو کد نوشته خودش میگه حداقل هزار تا رو میخواد خب و عرض به حضور شما که بعضی وقتا تنوع اشکال تولید شدش یه سری محدودیت های داره به خصوص تو گنای عادی مثلا متوجه شده بودن روزهای اول که وقتی مثلاً اینا تولید میشه شما که بهش نگفته بودید مثلا چشم سمت چپ و راستش متقارن باشه در حالی که مثلاً انسان ها باید چشمماشون یکی یه رنگ باشه ها البته عادی گوش هاشون مثلا باید یه شکل متقارنی باشه ولی شما هیچ جا به این نگفته بودید و ممکن بود اینا رعایت نکنه خب که دیگه چی شد که دیگه یه دونه دیگه رفرش
60
+
data/GAN_transcript_part3.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ عرض حضور شما که هندی شما ۱۱۵۰ دقیقه چیکار می‌کنید می‌خواید ۱۰ دقیقه استراحت کنید بیا ادامه بدیم پس استراحت بفرمایید ۱۲ ما تا ۱۲ و نیم میریم دو تا کد بهتون نشون میدیم یکی در مورد گن عادی اینکه رو ام نیستیم چجوری داده های فیک امروز نیستیم و یکی هم سایک زدن یه کاندیشن هم فیلمشو براتون گذاشتیم خب ۲۰ دقیقه فیلمه و عرض به حضور شما که اگه دلتون خواست اینا رو رعایت بفرمایید اینا چیزن به نظرم ازبکستانی بچه این شوهر خاله کیه
2
+
data/Huggingface_Transformers_Bert_ViT.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/Images_edit_introduction.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/LLM-Part1_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ به نام خدا دوستان عزیز ارجمند عرض سلام و ادب وقت همگی بخیر با نگاه مدل‌های بزرگ زبانی در حد معرفی و همینطور کاربرد دوستان ازمون خواستن یه مقدار سعی کنیم به اپلیکیشن های جدید حوزه رباتیک مراجعه کنیم با حالا یکی دو تا از رفقا هم کردیم تصمیم گرفتیم که تو این دو جلسه اینجوری برای شما صحبت کنیم که اسلاید آماده شدن ما امروز رو سعی میکنیم به معرفی ها بپردازیم اگرچه ظاهرشو نگاه میکنید تاثیر تو حوزه رباتیک نداره ولی مجبوریم اینا رو بدیم و بعدش جلسه بعدی بگیم که خب چجوری میشه از
2
+
3
+ مسیر این مدلی ما انتخاب کردیم خدمتتون مدل زبانی چیه و همینطور یا مدل های زبانی بزرگ چی هستند به مفهوم خیلی خیلی مهمی به نام سوپروایز لرنینگ مراجعه میکنیم که یکی از در واقع تکنیک های بود یکی از اتفاقاتی بود که سبب شد تو حوزه مدل های زبانی انقلاب به وجود بیاد که چ ضلع اون مربعی بود که تونست این اتفاقات تو یک سال و نیم اخیر برای ما به وجود بیاره و بعدش در مورد این صحبت می‌کنیم که وقتی شما یک مدل زبانی رو دارید اگر بخواهید تغییرش بدید چه راه های پیش روتونه آیا به صرفه است که یک مدل
4
+
5
+ یک میلیارد پارامترها رو کلاً بکوبید یه میلیارد پارامترشو عوض کنید یا نه یا اینکه اگر نمی‌شه یا شیشه رو چون نداریم چیکار میشه یک مدل چند صد میلیونی پارامتر در اختیارمون باشه ولی تسک ما را حل نکنه و من بخوام حل کنه چیکار باید بکنم چه جوری باید پارامترهاشو باید بردارم چه تکنیکی میتونم بزنم که روش‌های ادپترز و لورا رو خدمتتون معرفی میکنیم و اون میشه پکیج آموزشی مدل های بزرگ زبانی برای شما و جلسه بعدی اپلیکیشن ذهنتون تجسم بکنید که از این تکنیک های که گفتیم میشه استفاده کرد و در ضمن یه حاشیه‌ای هم وجود دارد که این در واقع چیز ما سرفصل های امروز اول اینکه یک لنگویج مادل یا یک مدل زبانی چیه خب این وقتی هم در واقع به عرض کردم رباتیک اجتماعی نداره و حتی وقتی به دیپ لرنینگ هم لزوما نداره یعنی از قدیم
6
+
7
+ مدل‌های زبانی اصطلاحا مدل‌های احتمالاتی هستند که به هر دنباله انتایی از کلمات یا توکن‌ها یک احتمال نسبت میدن احتمال اینکه w۱۰ رو ببینم چنده مثلاً اول کلمه من رو ببینم بعد علی رو ببینم بعد را بعد دیدن ها اگر بتونیم یک احتمال به این نسبت بدید شما یک مدل زبانی دارید که این میتونه معنیش از این باشه که برای استفاده بشه که داشته باشید بر اساس اینکه تا اینجا جمله را دارید کلمه بعدیتون چی باشه از اون مدل زبانتون استفاده کنید بیشترین احتمال رو بگیرید یا اینکه وسطش یک کلمه خالی بندازن مثلاً میگن که من به قدری نقطه چین بودم که می‌توانستم یک مرغ کامل را بخورم این نقطه حدس بزنید چی بوده کلمه گرسنه بوده و شما برای ذهنتون یه همچین مدلی دارید الان یعنی با توجه به جمیع کلمات یه کلمه‌ای انتخاب می‌کنید از بین دایره لغاتی که
8
+
9
+ مدل‌های زبانی قراره این کارو بکنه خب خدمت شما عارضم که مسئله بعدی در واقع چیزه کار کردن تو حوزه مدل‌های زبانی که در سطح کلمه یا عبارت یا جمله یه چیزهایی داریم و فرض کنید از تکنیک‌های ماشین لرنینگ استفاده کنیم همیشه اولین کاری که تو ماشین لرنینگ کلاسیک اینه که چی میبردیم توی فضایی به نام فضای فیچر یا فضای ویژگی که تو اونجا می‌تونستیم یه کار خوب انجام بدیم مثلا سگ و گربه رو از همدیگه شناسایی کنیم شناسایی کنیم قیمت خونه رو تخمین بزنیم تو مدل های زبانی هم شما کاری که باید بکنید اینه که چی باید یک جورایی مفهوم کلمات رو ببرید توی فضایی که قابل چی باشه حرف زدن باشه ولی آخر که قبلا بهتون گفته بودیم فضای ام نشون میده ما اول کلمات یا عبارات یا توکن هات در واقع کد میکنیم در ساده ترین حالت مثلاً می‌گیم که آقا اگه من ۵۰ هزار کلمه داره دیکشنری یه ۵۰ هزار
10
+
11
+ هیچ دو کلمه‌ای ارتباط معنایی با هم ندارند همه فاصله‌شون یکه درسته و من اینو اول برای در واقع چیز در نظر گرفته بودم حفظ عدالت بیداری نسبت به کلمات ولی واقعیت اینه که من اگه بخوام تو معنا و توی چیز اینا به همدیگه ارتباط پیدا بکنم و نزدیکای کلاس پی رو انتخاب بکنم فضای کوچتری ببره که فاصله کلمات تغییر بکنه و در ضمن کلمات از یک جنس بیان نزدیک هم وایستند اتفاقاتی که تو افتاد مثلا ۲۰۱۳ خب و بعدش حالا اینم کافی نیست من تو جمله پاراگراف میخوام ببینم کلمه جمله من دقیقا
12
+
13
+ و اینجا دیگه حالا از روش‌های رشد و شبکه‌های مبتنی استفاده کو سوال بپرسید جواب عرض به حضور شما که دو تا جمله بهش بگو بهت بگه که این دو تا جمله با هم همستان خلاف جهت ارتباط درسته یا یه متن بهش بگی تو چه حوزه‌ای بود اخبا گرفته حوزه دسته بندی کنید سیاسی ورزشی و و
14
+
15
+ داشته باشید موبایل بخرید یا نخرید با توجه نظر بخواهیم رد تاریخی ازش بگیریم خوب اولین اتفاقی که پیش جهش به وجود آورد داستان ها میاد به دنباله انتهایی توکن ها احتمال نسبت متن ۱۰۰ هزار کلمه داشتید به ماشینتون ساده ترین کاری که میتونید بکنید موبایل سه تا چیکار کنه یه متن ۱۰۰ هزار کلمه‌ای بهش داد
16
+
17
+ سلام چیز مثلا کتاب فارسی کتاب اون نمیاد مبل پیشنهاد بده بعدش میکنه فارسی دانشکده مکانیک و پیشنهاد اول شده حالا دوتایی ها را میبینه خب که اولیش کتاب بوده احتمال بعدیش چند میشه توگرم ها خب و اینا چیزایی بود که قدیم با اینا شروع می‌کردن می‌رفتن
18
+
19
+ معنا رو در نظر نمیگرفته درسته تاثیر نهاد در نظر روش های دیگه میاد تا تقریبا حوالی ۲۰۰۳ که آقای بنجیرو میاد یه مدل نتورک ارائه میده که یک زورش زیاد میشه و ادعا می‌کنه که من فراتر از یک حالت جمله بندی عادی مثلا میگه که اگه جمله بهش بدید ممکنه شبکه منینگ هم بتونه براتون پیش بینی کنه یعنی جمله‌ای که
20
+
21
+ فعل بوده من یه فعل دیگه‌ای از یه جنس زمان دیگه‌ای بذارم کارش حتی عوض بکنه ولی همچنان مشکلات جلوتر ۲۰۱۳ خوبی برای کلمات خوب به هم نزدیک باشند روزهای هفته کمپانی های کامپیوتری و و و دیگه از ۲۰۱۸ به بعد با در واقع ظهور ترنسرها و شبکه برت که میاد دیگه یه دفعه جهش پیدا میکنه و میرسیم به پریترین لنگویج مادلا یا مدل های زبانی که از قبل شدن و حالا هی هم دارن رشد میکن و سوپر لارج دارن تبدیل میشن با تعداد فوق وحشتناک تخ
22
+
23
+ ۱۵۰۰ میلیارد پارامتر داره یا یک و نیم تریلیون پارامتر وزن شده و بتونه هزاران کارو برای شما چیکار کنه خب همونطور که عرض کردم خدمتتون مثلاً کلمه شیر سلطان جنگل است شیر آب خراب شده یا از سوپر مارکت شیر پاکتی خریدم اینا توی خیلی از روش‌های قدیمی فرق شیر معلوم نمیشه تو فضای ۱۰۰۰۰ کلمه‌ای یه چیز داشته یه وکتور ۱۰ هزار تایی داشته که هیچ فرقی نمیک کدوم جمله است ولی همانطور که دیدید هی وقتی لایه لایه میرفتیم بالاتر تمام کلمات من جمله شیر عوض میشد و اونجا به میرسید که دیگه تو لایه آخرش انتظار داشتیم بین این سه تا فرق قائل بشه یعنی شیر تو این سه تا جمله سه تا چیز کاملاً متفاوت در میاد و توی فضا جاهای مختلفی با همدیگه میفته خدمت شما عرضم که لارج مدل
24
+
25
+ مدل‌هایی که تو اردر ۱۰ میلیارد پارامتر به بالا یا بعضیا میگن یک میلیارد پارامتر به بالا داشته باشند نمیدونم لامادو لاماسه اینا که مثلاً از هفت هشت میلیارد پارامتر شروع میشن ۱۷۵ میلیارد پارامتر بود عرض کردم ۱۵۰۰ میلیارد پارامتر لاما از ۷ میلیارد هست تا حدود ۷۰ میلیارد پارامتر به این میگن چی میگن شبکه های بزرگ مدل های بزرگ زبانی چه اتفاقی افتاد که مدل های بزرگ زبانی تونستن ظهور پیدا بکنن چهار تا اتفاق با همدیگه در کنار هم ثبت شد مدل های بزرگ زبانی رخ بده یکی اینکه دسترسی به داده زیاد شد داده آدما فهمیدن داده ها ارزشمندن و باید یه کاری می‌کردن که اینا رو
26
+
27
+ وجود داشت و دو تا تکنیک دیگه‌ای که اگر نبودن نمی‌گیم به مدل‌های بزرگ زبانی نمی‌رسیدیم اما ممکن در واقع اختراع شبکه‌های ترانسفورمر بود که امکان پردازش‌های سری و خیلی به ما می‌داد و یه دفعه سرعتش نسبت به النا خیلی خیلی خیلی بیشتر شده بود و مکانیزم همه به همه توجه و یک هفته دیگه به نام چی سلف سوپروز لرنینگ که اگر وجود نمی‌داشت باز چی میشد داستان میشد کتاب در مورد هر کدوم از کوچولو کوچولو صحبت میکنه خدمتتون عارضم که شما اگر به چیزا نگاه بکنید به این دو تا نمودار نگاه بکنید تا مدل های المو که حدود ۲۰۱۸ اوایل ۲۰۱۸ اومدن ببینید بیاید جلو تعداد توکن های که استفاده می‌کنند مثلاً تو اردر یک میلیارد بوده تا جیpt
28
+
29
+ بیش از ۱۰ به توان ۱۲ مثلا میرسه و یه دفعه یه جهش عجیبی توشون به وجود میاد همینطور توی تعداد پارامترها قدیم مثلا فرض کنید که تا مثلاً چرا روش هر شبکه‌ای که میاد بچه‌ها معمولاً یه دونه ورژن اسمال میزن لارج اینجوری خب ورژن مختلف شما میزنند اکسترا لارج یا لارج مثلا الم حدود چند هشت پارامتر داشته که میشه ۱۰۰ میلیون خبرش اینه gpt ۳ و فراتر از سه که اومد یه دفعه این عدد جامپ کرد مثلاً از ۱۰ به توان ۱۰ هم رد کرد خب و یه دفعه سبب شد که یه سری اتفاقاتی بیفته که حالا در آینده چیکار میکنیم در واقع اشاره میکنیم و اما یکی از اون چهار تا اتفاقی که سبب شد مدل بزرگ زبانی رشد کنن مفهومی به نام
30
+
31
+ سوپروایز لرنینگ ماجراش اینه که نه سوپروایز نه آن سوپروایز همه می‌دیدند که کلی داده تو دنیا تو اینترنت اطراف ما وجود داره که لیبل نداره و این سوال بود چه جوری ازشون استفاده کنیم خب مثلاً فرض کنید که فقط من برم یه میلیون تا عکس یا ۱۰۰ میلیون تا عکس از گوگل دانلود کنم ولی ندونم یعنی برچسبی نداشته باشم که این اسب گوسفنده فلانه فلانه چه‌جوری می‌شد از این استفاده کرد یا این همه مثلاً نوشته تو اینترنت بود چیکار میکردن ازش از مفهومی به نام سوپروایز لرنینگ استفاده کردن سوپروایز لرنینگ من یه تفاوتی که قائلم میگه نه سوپروایز یعنی شما جایی مثلاً عکس گاو بهش ندادید و براش بیان کنید که این گاوه نه کاملاً آن سوپروایزه ها با یه چیز کمکی شما لیبل براش تولید می‌کنید که این مثلاً گاوه مثلاً اگه صداش توی فیلمی بیاد و این صدا رو بگیرید صدای ما بیاد مثلاً این چیکار
32
+
33
+ کاری که می‌تونستن بکنن اینه که بیان مثلاً بگن که مثلاً فرض کن جمله ترانسپرز رو در نظر این تلاش از خودش استفاده می‌کردن لیبل نداشتم یا داشتم کلک میزدم و لیبل بهش میدادم تو حوزه مثلا تکست اینجوری بود متن بزرگی داشتن از نکست توکن میکردم با کلمات قبلی خودش و به این می‌گفتن آقا تو با این برو پریترین بشو یه مدل بیا بالا حالا من بعداً اگه بخوامش میکنم برای کار خودم و دیدم که با همین داده های اینترنت دارن به دقت های
34
+
35
+ فرض کنید شما یه مجموعه عکس‌هایی داشته باشید از اینترنت اصلا ندونید اونا چی اند چجوری میتونید یه مثال بزنم چیزتون آماده کنم من می‌خوام یه شبکه داشته باشم که برام کلاس انجام بده خفن‌ترین شبکه‌ای که ما دیدیم دیگه خیلی خفن بود که هنوزم در واقع جز یکی ازش استفاده میکنم خب اون زمان اومده بودن روی دیتا ست ایمیجنت که مثلاً یه میلیون و خورده‌ای تا عکس بود ترین کرده بودن کلی وزن به ما داده بودن ما فرض کنید مثلاً می‌خواستیم ببریم برای شناسایی مثلاً در و پنجره و نمیدونم تیر برق دانشگاه ازش استفاده کنیم چیکار میتونستیم بکنیم اول
36
+
37
+ آماده استفاده کنیم یکی دو تا لایه آخرشو ببریم کلاس‌های مورد نظر آخر که چیکار کنه به من همون سه تا کلاسو بده چون اعتقاد داشتم که چی لایه اولش خیلی چیز خوبی یاد گرفته که اینجام به دردم میخوره حالا فرض کنید که شما وزن رزنت رو بهتون نداده بودم فقط اینترنت داشتید مثلا ۱۰۰ میلیون تا عکس چیکار میتونستید بکنید هیچ لولی هم نداشتید اصلاً نمی‌رسید چی پرنده مثلاً حیوونه چی فلانه چه ایده‌ای دارید برای از این داده یه جوری استفاده کنید چیکار کار بهتون پیشنهاد بدم عکسا رو همه رو داره بیاید همشون مثلاً روتیشن اضافه کنید یعنی یه دونه عکس واقعی دارم یه دونه ۱۰ درصد روتی شده یه شبکه شبیه رزنت بیارم بالا برای خودم که بگم این ۱۰ درجه روتیشن ببینم تو بیا بهم بگو ده یا اون
38
+
39
+ اضافه میکنم برام رسید فقط پایین نگاه میکنم انشالله که لایه اولش خوب کار کرده عکس اینترنت دوستی استفاده کردم خب این سلف سوپروایز لرنینگه تو حوزه ایمیجه تو حوزه متن گفتم چیکار کنیم از خودش استفاده کنیم اینقدر بسازید بسازید تا به یه مدل خوبی برسه حالا نگاه کنید یا تسک شما را انجام میده یا نمیده اگه نداد آیتیون می‌کنید برای تسک خودتون اول میکنیم بعد
40
+
41
+ چند صد میلیون پارامتر رو اینشیالایز بکنیم جلو تا به یه جای خوبی برسید الان شبکه خوب تشخیص بده حالا چیکار کنم برای کلاس ولی خوبیش اینه که از آنبل دیتاهای موجود در اینترنت نهایت سوء استفاده رو کردی همین کاری که الان ما کردن رفتن از هرچی متن کرده بودن استفاده کردن لیبل هم نداشتا از خودش گفتم یه مدل فعلا بیاد بالا خب حالا من نگاه میکنم انجام میده یا نمیده اگه داد خیر و برکت اگه نداد چیکار میکنم یه جوری فاین میکنه که این کار برام بکنه درسته
42
+
43
+ آینده هوش مصنوعی دنیا دیگه نمی‌تونید بی‌خیالش بشید میگه شما یک همچین تصویری بهتون نشون بدن خب مثلا کلاس شبکه عادی کلاسیفیکیشن بدید نهایتاً به شما میگه کیک درسته خب قابل خوردن بیشتر از بهتون نمیگم ولی فرض کنید شما می‌خواستید بدونید این کیک گیلاس روشه اگر با چاقو ببرن کجاهاش بریده میشه چند لایه فرض کن که مثلاً خامه و شکلات و فلان داره و تو اردر مثلاً بعضا پیکسلی روش حرف بزنید با این عکس کلی محتوا تولید کنید این هیچ رقم با داده های سوپروایز نمیشه انجامش داد درسته اینکه آدم بکارید که بشینه برای این عکسه مثلاً هزاران جمله بنویسه
44
+
45
+ این اتفاق افتاده گفتم دو نوع شبکه‌های معروف داریم یکی شبکه‌های مس لنگویج مادلن که برت معروف‌ترینشونه اواخر ۲۰۱۹ اومد ماجرا این بود که رفت کلی داده ترین برداشت متن کرد کاری که میکنه تو ورودی یه جمله بهش می‌دید چند تا کلمشو میندازی بیرون مسکش می‌کنید پاکش میکن مثلا نوشته نقطه چینستنت این جای نقطه چین ستاره میزاری اون باید ستاره شما پیش بینی کنه و به این نقطه از عرفان می‌رسه کهچال و پیشنهاد میکنه خب و تو اینجوری بود شبکه اش که حدود ۱۵ درصد
46
+
47
+ خروجی شبکه اختلاف فاحش همه رو این مدلی شد که واقعا همچین چیزایی میتونه کار کنه که دیگه حالا به صورت خیلی خیلی جدی این اتفاق مطرح شد به جز لنگویج یه چیزی داریم به نام کازا لنگویج مادلینگ یا همون شبکه های اتوریسیو که تا انتهای اول بهش بدی چیکار کنه نکست توکن پردشن براتون انجام بده بهش بگیدسیستنت بعدیش بگه چی هی با اینایی که دارید اینو بگه که gpt اینا از این جنس و gpt اینا فقط دیکودر ترنسفور ندارن دیکودر دارند فقط فعال شما رو میاد شروع میکنه یکی یکی تولید کردن هی از خروجی خودش
48
+
49
+ سری زمانی دنباله میدید اون اولین اتفاقی که ازش میگذره چیه کشف میشه به یه ماتریس بردارهای حالا کوچکتر فشرده میشه کد میمونه یه عصاره تولید میکنه که من ماتریس در واقع کی و ولیوش ازش میخوام اگه دیکود داشته باشم تو دیکودرم چیکار میکنم ورودی بازدم کیو ولی اینو میگیرم و حالا اتنشن به اون رو انجام میدم و در نهایت چیکار کنم کارمو انجام بدم مثلاً اینجا تسک
50
+
51
+ ترجمه زبان انگلیسی تولید بشه که این مسیر رو رفته که قبلا دیدید و اساس کار ما توی لارج لنگویج مادل‌ها و همینطور ویژوال لنگویج مادلا و چیز آینده روش صحبت کنیم و کاربردهای رباتیک اینا رو بگیم همشون کلاً شبکه‌های مبتنی بر ترانسفورمن که اینا توشون رخ خدمتتون عارضم که یه مقایسه فقط برای خودتون داشته باشید اینه که عرض به حضور شما دیتا یعنی شبکه های جی پی تی و اینایی که اومدن هر کدوم اولاً چه سالی ترند شدن چند تا پارامتر داشتن اینجا نوشته شده مثلاً gp ۱۷۵ میلیارد پارامتر داشته gpt دو که سال ۲۰۱۹ اومده یک و نیم میلیارد پارامتر داشته دیتا ست های که روشون ترین شدن مثلا چه میدونم دیتا ست فرض کنید سی فور بوده که ۳۶۰ گیگا توکن داشته
52
+
53
+ برای همه مجاز نیست و اینجا براتون نوشته شده که رو چقدر داده اومدن بالا خدمتتون عارضم که مثلاً من یه جا دیدم برای یکی از این شبکه‌های مطمئن نیستم الان جمنای یه جاش خوندم ۶۵ ترابایت داده داشته برای اینکه ترین کنه خودش یا نه و عرض به حضور شما اینا بسیار هم چیزن اشتهاشون بالاست چون تعداد پارامترهاشون اور چند میلیارد و چند ده میلیارد و الی آخر بالاتره چیزه ماجرا اینه که هرچی داده بهشون بدین نه نمیگن و میخورن سعی می‌کنن یه مدل بهتری ارائه بدن باز یه مفهوم دیگه که باز خیلی سریع می‌خوام فقط معرفیش کنیم ازش بگذریم مفهوم توکنایزره که یک مفهوم خیلی تخصصی تو حوزه نشنال لنگویج
54
+
55
+ بالاخره وقتی ورودی می‌گیریم در حد کرکتر بگیریم در حد کلمه خیلی جذاب نیست ای و بی و سی و اینا بگیری چون مفهوم خیلی دیگه نمیتونه کنار خودش نگه داره ورد هم که بگیرید خب دیدن که خیلی چیز تمیز در نمیاد یه چیزی بینابین درآوردن که ما الان خیلی کار تخصصی روش نداریم اینکه توکنایز می‌کنن مثلاً فرض کنید پلیینگ مثلاً پلیشو یک کلمه میگیرن آی ان یه توکن دیگه خب که ممکنه تو فیلمی که بهتون معرفی کردیم از اونجا یه اشاره کوچیکی بهش میکنه دیده باشید خب که کلاً قبل از اینکه وقتی اینپوت تستتون رو میدید اول توکنایزش می‌کنید بعد میریم وارد حالا امینگ و ترنسفورمش میکن فرض کنید این تیکه داره برای ما انجام میشه یا اینکه توی عکس مثلاً این وی آی تی بهتون گفتیم روش ژ ترنس گفتیم عکس رو چیکارش کنیم و تو توکنایزش کنیم پچ پچ کنیم پچ ها میشن یه توکن ما ما
56
+
57
+ داستان چه معماری‌های معروفی تو حوزه لارج لنگویج مادلا داریم سه تا معماری معروف داریم یا انکرین که شبکه برت درباره نمونه یا روبرتا روبرتا شبکه‌ای که روبرت با داده‌های بیشتری شده و ربات تر شده خب خدمتتون عارضم که بست لنگویج مادله اینجوریه که گفتم یه جمله بهش بدید ۱۵ درصد کلمات که شما برداشتی خالی کردید اون برای شما تخمین بزنه خب شبکه‌های دیکودر آنلی داریم که جی پی تی ها همشون از این جنس کلا دیکودرن و انکر آن تو ترین شدن خیلی استیبل تر از شبکه های ان کد خب راحت تر و بهتر و بهتر سایزشون بالاتر بره این برای کلاسسیفیکیشن استفاده میشه یه متن بهش اخبار چیه
58
+
59
+ چه ویژگی جذابی تو شبکه وجود داره تولید میکنه داشته باشد بفرمایید وحشت نمیتونه مگر ایجنت های جدید اگر برسم جلسه آینده که قابلیت سرچ هم بهش اضافه میکنه یعنی میگه ببین برو گوگل سرچ کنید یعنی وزنش فریزه ولی قابلیت های میده به اینکه برو از کنار این ابزارها استفاده کن مثلاً تورات برو از اینم کمک بگیر این کار جذاب از چند تا چیز این کد را چیان شبکه‌هایی هستند که خب
60
+
data/LLM-Part1_transcript_part2.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ خوب حل بکنه و شبکه برت تی فایو و ممکنه جی تی آی ورژن پایین تر یا لاماهای مثلاً ورژن حتی شبکه‌هایی هستند که چیزشون موجوده‌ها وزن‌هاشون همه جا موجوده در اختیارتون قرار داده میشه فکر نمی‌کنم ۳ و نیم به بعد قطعا نمیدن بهتون جایی خودشونه سر رو نمیدونم ولی لاما کلا بعضی هاش آزاده شما قدرت حافظه داشته باشید میتونید هم دانلود کنید مدل چند صد میلیون پارامتر داره که اینا رو بهتون حالا آقای چیز احتمالا میان مثالی که براتون حل میکنم آقای سهرابی‌پور براتون خب عرض به حضور شما اینم باز تاریخچه زمانیشونه که از
2
+
3
+ ۴ ماه اول سال ۴ ماه دوم چهار ماهه سومش مثلاً چه شبکه‌هایی اومدن و هی رفته جلو تازه این تا انتهای ۲۰۲۳ هست ۲۴ جزش نیست جاهایی که می‌بینید یه چیزی زرده دورش یعنی پابلیک پابلیک کامل موجوده می‌تونید دانلود اینجا میتونید ببینید که متاد بیرون اومد دیگه درسته و همینطور gpt که الان دیگه به فور رسیده و هی داره میره جلو جلوتر و خیلیی‌ها هستن که دارن مدل‌های جدید این مدلی میدن بیرون و می‌تونید ازش استفاده ۷ میلیارد پارامتر دانلود می‌کنید دیگه اگه دلتون میخواد برید لایه آخرشو بندازید دور لایه آخر خودتون
4
+
5
+ خوانی داره کار میکنه خب یکی از کارهایی که باید بکنه مثلاً بچه‌ها نارسا خان مثلاً باید بتونن فرض کنید که حرف های آخر این چهار تا کلمه‌ای که بهشون میگم با هم بچسبونن یه کلمه بسازم مثلاً ما اینو به مدل های زبانی که میدادیم با وجود که واقعاً ببخشید هیچ دیوونه نبوده قبلش این مدل زبانی کنه این میفهمید تقریبا حل میکرد دیگه دقیقش کنیم چیکار میتونیم بکنیم یه هزار تا مثال اینجوری آماده بکنیم براش با روش‌هایی که بهتون میگم به جای ۷ میلیارد پارامتر مثلاً ۷۰۰ هزار تاشو عوض میکنیم و میبینیم این تسک رو دقیق آماده آماده خوب انجام میده ممکنه البته یه سری تسک های دیگش ممکنه یه کوچولو خراب‌تر بشه ولی برای ما مهمه چون تسک من الان مهم اینه که این کار برام خوب انجام بده دیگه خب بهتون میگم الان بهش میرسیم که این ۷۰۰ اگه مثلاً توی ۷ میلیارد تا
6
+
7
+ امروز برسیم بخش اول تمام کنیم بخش جلسه بعدیمون کلاً توی فضای تخیلی کاربرد یعنی چیزه هیجان انگیز از اونایی که میشنوید یه مقدار اول پیدا می‌کنید که ما چرا این کارا رو نمی‌تونیم بکنیم ولی از اونور هیجان هم داره که چه کارهایی میشه با تلفیق و صوت و اینا انجام داد یعنی بپردازم بخاطر همین سرعت گرفتم بچه‌ها یک مفهومی که شبکه‌های در واقع زبانی کلا هر شبکه میشه ازش انتظار داشت شبکه‌های خیلی قوی مفهومی به نام فیو شات لرنینگ خب فیوچات لرنینگ حرفش چیه حرفش اینه که آیا میشه با تعداد کمی نمونه نشون دادن به یک مدل بعد یه تکی ازش سوال بپرسید بتونه جوابتونو بده یا نه مثلاً تو حوزه ایمیج میتونه چی باشه فرض کنید که
8
+
9
+ زبان ایرانی چینی هندی اینا ترین شده یه مثلاً فرض کنید روستایی توی آفریقای جنوبی پیدا میشه که یه زبان دیگه‌ای برای خودش داره خب و یه عدد نماد دیگه‌ای داره مثلاً برای اعداد یک تا نوش هیچ چیز دیگه‌ای استفاده می‌کنه چهار تا دونه عدد یک اینو دارید چهار تا دونه بعد می‌خواید بگید که من این چهار تا رو بهش نشون بدم آیا پنجمی بیاد این میتونه بفهمه که اون یک زبان فلان روستای فلان آفریقای جنوبی بود یا نه خب اگه این فهمید بهش میگن با چهار تا نمونه نشون دادن از اون موفق شد چیکار کنه این کارو بکنه یه قابلیتی که ال ام ها دارند و فوق عجیب بود برای آدم ها مثل همین عرض کردم مثال همین مجتبی شهاب که ما می‌دادیم می‌گفتیم ما کلمه انتهای کلمات بهش بچسبون به اون خروجی میداد و درست میداد خب زیرو شات لرنینگه بدون اینکه هیچی شما قبلا تو این حوزه بهش ترینینگ داده باشید
10
+
11
+ کلاسیفیکیشن فرض کنید که من یه سری حیوون دادم که کلاسیفایی برام بکنه توی ترینینگ ست هم عکس زرافه رو هیچ وقت بهش ندادم ولی تو کلاسیفیکیشنش تو لایه در نظر گرفتم یا نامردی کردید یا عمدا نشون ندادید حالا این چجوری بازی رو شات بفهمه مبنای از لحاظ مبنایی کی میتونه اینو متوجه بشه هیچ زرافه ندیده بعد یه عکس زرافه بیاد این بتونه بگه زرافه است کی ممکنه این اتفاق بتونه رخ بده بقیه رو داره نه یک برای زیرو شات شما یک اینفورمیشن یا اطلاعات اضافی باید بهش داده
12
+
13
+ زرافه شتر گاو پلنگ است حیوانی است که از یک بر شبیه شتر است از یک بر شبیه همچین جمله داده باشه یه توصیف متنی ولی یک دونه زرافه بهش نشون ندادیم یا مثلاً گورخر بگید و این انتظار داشته باشید که راه راه بودن و یه جایی پیدا کرده باشه چون از چیزای دیگه شبکه ترین شده باشه اسپ هم یه جای دیگه پیدا کرده باشه این دوتا رو تهیه هم ببینه زیر شات لرنینگ به شما بگه چی این گورخر خب ها به ستون سمت راست نگاه کنید گفته ترنس انگلیش تو فرنچ دو نقطه چیز اینتر زده خب به یه شبکه چیز لارج مدل مثل جیpt این زیر شاید هیچی این فقط یه جمله یه جمله فقط کمکش کرده گفته ترن انگلیش امیدواره که این جی پی مفهوم اینو بفهمید و بعد گفته چی بفهمه که اینم تازه باید برگرده اگه میخواست ل
14
+
15
+ دو نقطه یه کلمه‌ای داده جلوش معادل فرانسه نوشته دوباره یک کلمه انگلیسی داده معادل فرانسه دوباره یکی دیگه داره انگلیسی شات لرنینگه سه تا نمونه به انگلیسی از انگلیسی به فرنچ برام ترجمه کن درسته حالا اگر شما از شبکه‌تون انتظار داشته باشید با همین شات جواب بده بهتون خب بهش میگن مفهوم این کانتکس لرنینگ اصلاً شما به شبکه دست نمی‌زنید انجام میدید الان شما فقط از شبکه انتظار دارید شما خروجی بده و امیدوارید یعنی چشم امیدتون به اینه که این بازی رو لرنینگ کار برای شما دربیاره خب اما میشه چیکار کرد میشه وزن های شبکه رو آپدیت کرد دو سر بوم من برای شما توصیف بکنم که بهتون بگم هیچ‌کدومش برای ما خوبیم وسطش یک سوم اینه که به هیچ وزن شبکه دست نزنید شبکه همین که هست با همین قابلیت شمایی که خودتو و
16
+
17
+ محدودیت‌هاش بساز چیکار کن خروجی ابزار داریم انقدر که بتونیم مثلاً ۷ میلیارد و ۱۷۵ میلیارد یا ۱۵۰۰ میلیارد پارامتر رو چیکار کنیم که منطقی هم خدمتتون گفتم میزنید ابروشو درست کنید چشمشو کور می‌کنید مثلاً میاد فقط تسک شما نهایت خوبه عمل میکنه همه چی یادش میره همه مفاهیم اینکه ما چیکار کنیم که با یک انتخاب بهینه از در واقع پارامترهای شبکه بتونیم فا کنیم برای تسک خاص خودمون مثلاً همون کاری که گفتم آقای شهاب تو ذهنش انجام بده ولی مثلاً یه مدل زبانی جلوشه فرض کنید چه برد حدود چند صد میلیون پارامتر داره و چیکار کنه که این
18
+
19
+ عادیتون همون با مفهوم گرادیان و اینا هی نمونه بهش بدید و آپدیت کنید که حالا بهتون میگم انتخاب این چیزی که باید از تست های قبلی یاد گرفته باشه کلمه ترنس یعنی چی انگلیش تو فرند یعنی چی انتظار داریم اینو یاد گرفته باشد دقیقا اگر بهش نمیگفتی دیگه منطقاً می‌ نوشت چیز این��ر میزدید نباید چیزی میداد اینو حداقل بهش بده بین اللهی ولی ولی این کانتکس لرنینگ چیزی بوده که خودشون هم هاج و واج موندن یعنی خودشون هم فکر نمی‌کردن اینقدر شبکه‌ها قوی باشن یک مفهوم یه مفهوم دیگه مفهوم ایمرجنت باز دوباره از اون
20
+
21
+ یعنی ظهور یه سری اتفاقات تو قبل از هیچ تغری نبوده بعد از اینکه دیتاشونو از یه عددی بردن بالاتر خودش ظهور پیدا کرده مثلا این به این عکس دی نگاه کنید که persian qa یه شبکه مثلا فرض کنید جی پی تی مثلا سه قبل از اینکه با تعداد داده‌های ۱۰ به توان ۲۲ تا مثلاً داده ترینش بکنن نمیتونسته جواب فارسی بده دقتش ۲۵ درصد بوده تعداد داده‌هاشونو بردن ۲۴ تا هیچ فرقی تو فرایند ترینینگ ش نبود دقت شده ۵۵ و این اتفاقات عجیب غریبی که داره ظهور میکنه تو فقط با رشد دادگاه زیاد میدن به شبکه زور شبکه میره بالا کلاً خب و این پدیده به نام ایمرجنت و این چیزی که واقعاً داره رویت میشه و الی آخر
22
+
23
+ خیلی زیادی یاد میگیره ارتباط پیدا میکنه و به چیزهایی داره میرسه که ما فکر می‌کنیم مدل سوال فارسی بهش ندادیم این رفته ارتباطات عمیق زبانی پیدا کرده یعنی مثلاً فهمیده که وقتی این مدل فارسی ترجمه کرده برای خودش این از نهاد فعل فاعل مفعول تشکیل شده بعد علامت سوال من باید اینجوری برم جوابشو بدم اینو از کجا یاد گرفته انگلیسیه از رو اون رفته دیده من اینجوری تولید کرده و خفنی به نظر میاد که هرچی دارن فقط مدل را میبرن جلوتر داره زورشم بیشتر میشه معضلی که از ته ماجرا بهش داده کم آوردن از هر چیزی داشتن خرج کردن حالا احتمال داره مثلاً نسل بعدی واقعا این باشه داده‌های خالی زیاد داره میده که ما نداریمش
24
+
25
+ ساعت‌ها آدم‌ها با همدیگه مکالمه دارند در روز ولی هیچکی از این استفاده نمی‌کنه خب باز که هست تو آموزه‌های دینی ما هست که همه اینا نگه داشته میشه قیامت لحظه به لحظه ثانیه به ثانیه چیزی که گفتی مهمه تو میگیرن خب اینو فرض کنید نصب مجوز بگیرن بیان کلی مثلاً میکروفون نصب کنن تو کل عالم داده رو بگیرن بعد دوباره می‌تونن به شبکه‌های عجیب غریب تر برسن و و و یعنی الان داده کم آورد استفاده کردن ویدیو هم داشتن استفاده کردن بعضی ها مجوز نگرفتن از کتاب های آدما از فیلم های هالیوود و و و استفاده کردن کسی اجازه نگرفته کسی شبکه ترند شده یه غولی شده الان برای خودش همه چیو می‌تونه بگه حتی زیر اشاره آره دیگه مقالات استفاده می‌کنن الی آخر و اما بریم سر اصل ماجرامون این ماجرای علمیه تنها ما
26
+
27
+ خیلی راحت‌تره و استیبل ترن توی توسعه ورت رفت ولی مثل تی فایو هم داریم که بردنشون جلو و سوال ما اینه که ما دنبال یک راه حل بینابینی هستیم نه میخویم شبکه داشته باشیم که به هیچیش نتونیم دست بزنیم که هرچی اون میگه زورش همونه که اون به ما داده نه اینکه ما بکوبیم از اول بسازیم خب مفهوم پیدا میشه به نام پارامتر افشن اگر تمام شبکه را بکوبید دوباره بسازید یعنی معماری دست نزدید ولی همه اون ۱۷۵ میلیارد پارامتر یا همه اون ۱۰۰ میلیون پارامتر دست بزنید بهش میگن اگر این اصطلاح رو جایی دیدید یعنی تمامی ها رو تغییر دادید فول
28
+
29
+ کی منطقیه که انجامش بدیم هم داده تو اشل خود اونا داشته باشیم خب بعضی وقتا ما ریسرس محاسباتی داریم داده به اون اندازه نداریم روش‌هایی هستند به نام پارامینگ از بهتر عمل میکنه مثلا شما ۱۰ ۰۰۰ تا دارید نتیجه میگیرید چرا چون داده های کم خطر زیاده تو واقعیت ��د عمل میکنه ولی پارامتر بهتون می‌گیم که خیلی افشنت عمل میکن و بهینه عمل می‌کنن با یه تعداد داده خیلی خیلی خیلی کمتر تو اوردر یک تا ۵ درصده کل جاده‌های شبکه شما پایین شبیه اونه حالا سوال اینه آیا بهترین
30
+
31
+ مجهز به این روش‌های پپت شدن مجهز به پخت شدن در واقع خیلی خیلی خفن‌تر از خود حالت عادی و یه پله خفن تر از قدیمی و پیاده سازی اما چرا اصلا ما به پفت نیاز داریم چرا مسئله پارامتر افشن مهمه چرا مهمه بچه ها چرا ما باید شبکه بتونیم کنیم چون تسک‌هامون مدام عوض میشن تسک های جدید ظاهر میشن که تا دیروز اصلاً فکرشم نمی‌کردیم وجود داشته باشن عرض به حضور شما یه سری کارها لازمه که
32
+
33
+ تسک‌های ریزتر بشکونه و بره جدا جدا انجام بده اینه که چیز بکنه مثلاً میگم فرض کنید شعوری پشتش نبود یه مشت نوشته بوده این رفته یه چیزایی یاد گرفته مثلا وسط راه یاد گرفته فحش هم بده بعد شما مثلاً می‌خواید آقا یه مقدار رعایت بکن مثلاً یه همچین چیزایی باید چیز بذارید که وقتی خروجی تولید یه جایی هم مثلاً ببندی و فلان و اینا و این الاینمنت ها و تغییرات لازمه انجام بدید و کلاً ترنسفر لرنینگ کردن هم به تسک های جدید هم به مدالیتی های جدید یعنی تلفیق نوشته عکس فیلم الی آخر در کنار همدیگه سبب میشه که ما به پفت احتیاج داشته باشیم اما سوال یه عده گفتن ما بیایم چیز کنیم مثل حالت عادی ترنسفر لرنینگ از آخرین لایه بگیریم بیایم عقب مثلاً یه شبکه برتو بگیریم اول فقط لایه آخرشو
34
+
35
+ خودش حدود ۱۰ به توان ۸۰ خب بعد مثلاً ۱۰ به توان شش تاشو که تیون میکردن میدید نسبت به پولی فا ۱۰ درصد پایین تر خب ولی بد نبود ها مثلا شبکه فقط لایه چند تا لایه آخر که حدود یک میلیون تا پارامتر بوده فقط ریتیون می‌کردن ۹۰ درصد دقت رو می‌رسیدن بعد آوردن ۱۰ به توان هفت تاش کردن دیدن اومدن بالاتر ولی دیدن زمانی که بخوان به دقت کولیفای برسن باید چیکار کنن تو اردر ۱۰ به توان هشت تا باید پارامتر
36
+
37
+ با حدود ۱۰ به توان ۵ تا پارامتر کردن به همون دقت و یک سوال مطرح شد که چیکار میکنه آیا ما لازمه که از لایه آخر بیاریم عقب یا میشه حقه‌های دیگه‌ای زد و کارهای دیگه‌ای کرد همین قدر بدونید که پس روش‌های در واقع ترنسفر لزوما بهینه ترین نیستند اما دنبال پارامتر افشنت متدها هستیم در یک نگاه بچه ها اون سه تا چیزی که می‌خوام خدمتتون بگم اینجا براتون آوردیم سه تا روش پت می‌خوایم بهتون بگیم که اینا می‌تونن تکی استفاده شن و می‌تونن هر سه تاشون با همدیگه استفاده شن و هر کدومشون در عین اینکه تعداد پارامترهای کمی از شبکه رو میکن دقت قابل ملاحظه‌ای میارن بالا یک روش اسمش هست ادپتر که
38
+
39
+ شبکه‌های چیز عادی ترانسفورمر عادی بعد از اینکه اتنشن و فیت فوروارد نتورک داشتیم یادتون بود میرفت با خودش جمع میشد و بعد از نتورک‌ها می‌گذشت یه سری باکس های قرمز رنگی اینجاهایی که من بهت میگم اضافه کن خب یکی بعد فوروارد نتورک ها اضافه کن حالا تو ورژن اولیش بعد اضافه کرده بعدش دیدن که حتی اینم بردارم اون بالایی رو فقط بزارم خوبه بهتون میگم چیه یه روشی داریم به نام سافت خب که تو ورودی تغییرات به وجود میاره من این سوال ازتون بپرسم به زیرو لرنینگ فرض کنید به چیز به مثلاً یه ال می‌ید ترنس انگلیسی دو نقطه چیز اینترزنید یک کلمه آیا امکان شما میتونستید عوض بکنید که باز هم این کارو بکنه آره مثلاً پلیز
40
+
41
+ کاملا ممکنه تغییر بکنه یه ع��ه‌ای دستی اومدن روی این کار کردن چه پرامتی بدیم دقت تسکمون میره بالاتر یعنی ایده دادن که من مثلاً چند تا جمله پیشنهاد بدم یا الگوهایی پیشنهاد دادن که اگه این کارو بکنیم دقت شبکه‌های عمیق همیشه دنبال کنن همه چیو کاری کنن که حتی این هم در بیاد توی روش سافت اینجوری میکنه که میاد به ورودی چند تا توکن اضافه تر اضافه میکنه که این قرمز ترینبلن مفهومش این میشه که جمله‌ای که شما دادید چون چند تا هم اون ترین آورده انگار جمله‌تون رو تغییر داده مثلاً جمله شما واقعاً این بوده ترن دیسپ انگلیش یا فرام انگلیش تو فرنچ ولی اون با توکن های که آورده مثل این بوده که
42
+
43
+ دیده که این بهتر کار میکنه که حقه میزنه و چند تا توکن اضافه میکنه تو ورودی و مثل اینکه جمله شما را عوض میکنه یه روش که داستان عوض میکنه و هر سه تای اینا میتونه با هم حتی استفاده بشه و اینا در واقع مهمترین متد های معروف ترین و الان کلاً دارن از اینا استفاده میشه عرض به حضور شما که یه ده دقیقه استراحت بفرمایید ساعت ۱۱:۴۰ برگردید من تمام می‌کنم و آقای سهراب میگم بیاد حالا بخش اول کد شما تشریف بیارید چیز به درد بفرمایید خیلی سریع بگم سه تا روش معروف داره زدید
44
+
45
+ اولین روش بسیار کارا بود و تو اون عکس دیدید که در مقابل جزئی بسیار بسیار قوی عمل می‌کرد روش به نام اضافه کردن ماژول‌های ادپتر حرف یادتونه یه بخش در واقع چیز داشتید سل داشت فوروارد نتورک میشد میگه بیا بعد سلف اتنشن و بعد نتورک یه همچین شبکه بزار که اینجا نشون دادم خب یعنی اینجا که قبلا هیچی نبوده شما ادپتر بزار و حالا خود ادپتر چیه خود ادپتر یک شبکه دو لایه است میگه مثلاً فرض کن که توکن
46
+
47
+ بردار هزارتایی بهت رسیده اول کوچیکش کن مثلاً بکنش ۱۰ تا ۵۰ تا بعد یه مثل جلو چیزی روش بزن و دوباره برگردونه به هزار کاری که میکنید اینه حالا تو شبکه بیا اینو این ادپترها رو به تمام ماژول‌های انکودرتون اضافه کنید و سایر وزن های شبکه رو فریز کنید این دفعه دیگه برخلاف ترانسفر لرنینگ که لایه آخر یکی مونده به آخر دوتا فریز میکرد یه چیزهای فریز داره یه چیزایی چند صد میلیون پارامتر یا جی پی تی ولی آخر یا چند میلیاردشون هدفرا چی میشن یه سری تعداد پارامتر محدودی که رفتن وسط شبکه چی شدن جا شدن و شما فقط می‌خواید اینا رو تیون کنید تا اون تسک مورد نظر شما انجام خب پس یه
48
+
49
+ در ضمن ادپتر علاوه بر این شبکه فوروارد یه دونه چی هم داره اسکیپ کانکشن هم داره که قبلش بیاد و بعدش وصل کنه حالا فرض کنید یه شبکه گرفتید برای مثال زدید خوب میخوید اول شبکه فعلا کارهای قبلی خودش بتونه انجام بده شبکه با چه وزن های چیز میکنید اینشیالایز میکنید نزدیک چند نزدیک تا چه اتفاقی بیفته مثل اینکه وجود نداشته باشه یعنی فاز چیز هست فاز مستقیمش وجود نداشته باشه چه اتفاق خوبی میفته تمام تسک های قبلی یادشه حالا میگه شروع کن حالا
50
+
51
+ خرابکاری میکنه یه مثال بزنیم اگه شما یه دونه ۱۰۰ تایی داشته باشید خب بعد ببر چند تا ده داره چند تا پارامتر اضافه میکنه بایوس رو ولش کنید یه ۱۰۰ تا رفتید به ۱۰ تا این چند تا بهتون میده هزار اینجا داره ۱۰ برگرد یه ۲۰۰۰ تا پارامتر به تعداد ضربدر دو هم بکنید میشه ۴۰۰۰ تا به تعداد ماژ این کد دارید و تعداد پارامتر می‌بینید که در کل مثلا ۴۰۰ هزار تا در حالی که
52
+
53
+ تلاش میکنه خروجیش خیلی غافلگیر کننده نباشه برای ورودی بالایی یعنی ماهیت یه دلتایی به خودش میگیره اینکه نسبت به اون لحظه دستش رسیده تغییراتی هم بده جزئی که چی بشه که بعدی که داد بالای غافلگیر نشه بتونه تسک های مثلا چیزهای قبلی خودش تا حد امکان داشته باشه خب و این ماجرا سبب میشه که چون ادپترها بعضی وقتا قابلیت این دارند که ترین شد برش دارید یه جای دیگه یه روزی استفاده کنید مثلا میگم یه شبکه دارید یه تسک یک من درآوردی مثل اون
54
+
55
+ عوض میکنید چی میشه ۲۰۰ میلیون خب و کسی که یک دست انجام میدید و در ضمن ممکنه شما به درد دیگران بخوره جوری که دارن جاهایی بارگذاری بکنید که توی پیاده سازی بیخیال ش بریم جلو یه مطالعاتی هم انجام شد که دیدن حتی بعد چیز هم نیاز نیست سل پشن هم بزاری همین فقط بده نتورکی هم بزاری هم به همون کیفیت خوب کار انجام میده یه مثال ببینید از ادپترها گفته مثلاً یه بار برت لارج رو برداشتم خب
56
+
57
+ داشته باشند ۹ تا ۲۰۰ میلیون تا ترین کرده تا به دقت توتال ۸۰.۴ درصد برسه همین کار رفته با ادپتر انجام داده کلا دو درصد پارامترها از لحاظ حجم درگیر بودن به دقت ۷۹.۶ خب فقط جا داده و فقط ادپترها رو ترین کرده با دقت نزدیک به همون کاری که کرد رفته چیکار کرده کار خب عرض به حضور شما باز دوباره مثال های دیگه که تو ادپتر هست دیدن که وقتی رفتن لایه‌های آخر شبکه را ترین کردن
58
+
59
+ از مثلاً ۱۰ به توان ۷۰ با دقت ۷۸ درصد رفتم در حالی که با ادب ۵ تا پارامترم هنوز دقته بهتر از با اون تعداد داده دارند زمانی خیلی موفقه که داده‌هاشم خیلی زیاد باشه اگه داده‌هاتون کم باشه خطر داره رو ادپتر واریانت های مختلفی زده شده یه آقایی به نام فایفر توی دانمارک گروهشون خیلی توی زمینه کار کرده اومده مثلا همین پیشنهاد داده که آقا بعد چیز جا بدید بخش جا بدید در ضمن اون جایی که میرفت بای پس میشد قبل عدن نور بزارید دیگه بهتر میشه با چیز رفته با سعی و خطا دیگه اون اسکیپ کالکشن رو اگه به جای قبلش بگیرید دقت شبکه بالاتر میره فقط تنها جایی که در واقع ترین میشه این بخش بالاییه ماژول های اینکودر یا دیکودره یه بخش پایینش کامل فریز شده
60
+
data/LLM-Part1_transcript_part3.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ باید وایسه خروجی هدهای مختلف کانکت بشن درسته که بعد بیاد ازش استفاده کنه این فرقیه که اساساً داره با اون دو تا روش دیگه‌ای که می‌خوام خدمتتون عرض کنیم و حتی دیدن استفاده کنند زبان محلی تو شیلی که دیتا ست خیلی خیلی کمی هم داشته با تعویض فقط کردن مثل انگلیسی حلش کرده بودند و دیدن که اینا از جاهایین که میتونید تعویضش بکنید و مثلا یه سری مفاهیم مثل اینکه تو اون جمله کی نهاده کی فلانه تو چیزهای دیگه دیده شده باشه و این فقط ارجاع بده به اون تسک خاص اون زبان خاص خوب و احتمالا این کار بتونید انجام بدید موضوع
2
+
3
+ یکی ببینیم سرما خوردم الان عرض کردم خدمتتون اینه که ازتون پرسیده بودیم به نظر عوض کنیم ممکنه نتیجه تغییر کنه همتون شهودی گفتید که بله ماجرا اینه که تو سافت کاری که داره وارد شبکه ترانس بخش اضافه میکنه کنار اون چیزایی که شما دادید خب شما نوشتید ترنس تو انگلیش این چند تا چهار تا خونه دیگه هم اضافه می‌کنه مثلاً تو اردر ۵۰۰ تا هم باشه کافیه ۱۰ تا دونه توکن بگذارید
4
+
5
+ درصد پارامتر فقط تو شبکه فاینتیون میشن و دیدن که همین کارو که می‌کنن دقت می‌ره بالاتر و یه سری تسک‌ها رو می‌تونن چیکار کنن به خوبی انجام بده یه چیز دیگه داریم از سافت یه کوچولو خفن‌تره بهش میگن پریفیکس و اون حرفش اینه که فقط نیاد تو ورودی شبکه این توکن ها رو اضافه کن برو تو ورودی هر لایه توکن اضافه کن یعنی حتی لایه یکت عوض شد یک سری توکن های ورودی میاد اونجا هم باز دوباره چیکار کن دوباره بیا توکن جدید بهش بده و این تا آخر شبکه برو جلو و حتی دیدن باز دوباره توی سری تسک های مثل سایزیشن یا تکست تو تیبل دقتش از پولیفاتیون روی اون شبکه بالاتر رفته تعداد داده های محدودی که داشته و اتفاقی هم که میفته معادل ریاضیش اینه که میاد به
6
+
7
+ کوئری و ولیو احتمالاً به ماتریس دبلیو ماتریس پی و ولیوهایی که بود کیو ولیو داشتن میرفتن زرد میشد ادامه میداد چند ستون اضافه کردیم که اون ستون و این ستون دستی اضافه کنید و اینو بکنید شما شبکه خواهید داد و دقتش خیلی خوب میشه و آخرین روشی که می‌خوایم بهتون بگیم یه روش حرف حسابش هم اینه میگه شما کی و ولیو داشتید که میرفت دات میشد این دبلی برو اصلاحش کن این w تمام پارامترهاش با یه دلتا دبلیو جمع بزن ولی اینجوری که من میگم این کار بکن w ممکنه ۱۰۰ باشه یعنی چند تا پارامتر داره ۱۰۰۰۰ تا
8
+
9
+ ماتریس چاق و لاغر در نظر بگیر اولی باشه ۱۰۰۰۰ در ۲ فرض کن بعدی باشه ۲ درصد خب اول که میاد به دو تبدیل بشه به صد دوباره و چیزی که تولید میشه ۱۰۰۰۰ تاییه و این بره با اون در واقع چیزهای معادل در یارو ولیو جمع بشه ها اضافه کنه خب و این فقط ترین بزار w فیکس کن مثلاً رفتی با رفتی جلو دبلیو کو فیکس بکن ولی اجازه بهش بده به موازی دبلیو یه تغییراتی رخ بده wو به علاوه دلتا دبلیو بشه تو هر درایهش اون دلتا چجوری گفتیم به دست میاد یه ماتریس آ و بی شما تریل کن که وقتی ایکس میاد
10
+
11
+ ورودی اول در آ ضرب بشه ابعادش کوچیک بشه بعد دی درش ضرب بشه بزرگ بشه این هم سایز میشه با w جمع بشن و اینو بده تا آخر برو دیدن این کارو که می‌کنن باز دوباره دقت‌های عجیب غریب می‌گیرند و فقط همین قدر به من بگید الان فرض کنید باز مثل قبلی ۱۰۰% در دو داریم ماتریس یه دو درصد چند تا پارامتر داریم کلاً ۴۰۰ تا تک دونه داریم برای دبلیو کوکی مثلاً ۴ تا تک با همین تعداد در واقع دبلی ها دیدن تغییرات عجیب غریب رخ می‌ده مثلاً فرض کنید که روش لورا رو که زدن روی مثلاً دیتا ست چرا ویکی اسql دیدن که با تعداد مثلاً ۱۰ به توان هفت تا پارامتر دقتش از حالتفیکس بهتره از عادت از ادپتر دار بهتره ولی آخر خب و خوبیش اینه که
12
+
13
+ داشته باشید یه بار دیگه مرور بکنیم ادپترا می‌رفتن کجا می‌رفتن بعد فیت فوروارد می‌نشستن تو هر لایه لوراها چیکار می‌کردن w رو اصلاح می‌کردن با یه دلتایی جمع می‌زدن و پریفکسیونینگ چیکار میکرد یا فقط به ورودی ها میومد چند تا توکن اضافه میداد شما داشته باشید خب کلا اگر استفاده کنید تعداد پارامتر شبکه که استفاده میشه زیر ۵ در درصد تعداد شبکه های تعداد شبکه‌های پارامترهای شبکه را دست میزنید ولی واقعاً می‌تونید با دقت و عجیب غریب برسید به خصوص وقتی تسک های جدید میخوید بهش یاد بدید که قبلاً ندیده و از مدل‌های زبانی استفاده کنید البته با توجه به محدودیت‌های فعلی سخت افزاری نرم افزاریمون کسایی که فایل میکن ودارن شبکه برت و تی فایو و اینا رو دست میزنن
14
+
15
+ دانشگاهی می ارزه یا نه یا اینکه بزنیم نگاه کنید که اصلا دستش نزنید با خودش برید جلو یا اگه می‌خوایدش بکنید روش شبیه ترنسفر لرنینگ بد نیست نمیگم می‌کشتتون ولی روش بهینه‌تر وجود داره روش‌های لورا چیز هدف و پریفشون اینه که شبکه رو یه جایی کوچولو
16
+
17
+ لول هد مثلاً ورود می‌کنه خب و این تغییرات رقم میزنه و این اتفاقاتی که باید به خاطر بسپارید تا انشالله جلسه بعدی تو کارهای ازش چیز کنیم دیگه استفاده بکنیم معرفی کنیم یادتون بیاد که اینا چی بودن عصبی ماتریس همونه دیگه ماتریس دبلیو همونه شبکه عصبی اول میکنه بعد بزرگ میکنه حالا روش تحقیق کردم جالبه گفتن آیا این دلتا دبلیو که داره اضافه میشه صرفا داره چیز هایلایت میکنه یعنی تو تسک های قبلی میاد فقط پر
18
+
19
+ واقعا مفاهیمی از تسک جدید بکنید چون اول شبکه می‌خواید تغییر نکنه یعنی صفر باشه تاثیرش بخش بیش خود صفر میزارن استفاده کردید خود دبلیو برت بیاد بالا ولی به مرور زمان چی میشه وارد بشن تغییر من برداشت خودم شخصی میگم یکی دو تا چیزهایی که حاشیه خوندم یا شنیدم کنارش یکی در مورد این جمله را اضافه کنم مطالعه کردم دیدم لایه آخر خیلی تاثیرشون بیشتر از عدد لایه
20
+
21
+ افت کیفیت کار داریم و به نظر میاد لایه آخر دستگاه خیلی مهم میشن که همه واریانت‌هایی که به ذهنشون خورده رو زدن گفتن ثابت باشه برای چی باید این جمله صفحه اینجا باشه شاید اونجاتر بیفته بهتر باشد میخواستم بگم این تفاوت ذاتی شبکه‌های فعلی اون با قبلی قبلی یک لایه رو فریز میکیم اینجا این کارو کرده که وسط وسطاش محاصره میشه لایه های قابل ترین شدن با لایه های غیر قابل شدن و این ترید شده ها یاد میگیند که ورودی و خروجی که میدن تحویل تو اشل قبلی باشه یعنی باید یاد بگیرند که چیزی که میدن تحویل بالایی تغییرات
22
+
23
+ شبکه خیلی هوشمند میشن برای اینکه ماژول‌های قابل چیز باشد برداشتن اینزرت کردن باشند یعنی ماژول‌های هوشمندی که می‌تونند کارهای دست نمی‌زده ولی الان این کار میکنن برداشت شخصیت خب بچه‌ها من تا این لحظه اجازه بده متوقف کنم آقای تشریف بیارید تا ۱۲: نیم بچه‌ها اگه امکان داره تشریف داشته باشید من خودم جلسه دارم ولی ما یک جلسه دیگه بیشتر نموندیم حیفه واقعا برسیم همه اینا رو وقت گذاشتیم حالا محمد هم زحمت کشیده کلی
24
+
25
+ دسترسی بدم به اشتراک خود در خدمت سلام عرض می‌کنم ��مگی
26
+
27
+ مرور میکنیم با پکیج ترن انجام بدیم استفاده میکنه موقع ری استارت بکنید بعد ادامه ادامه بدید تا بتونید ازش استفاده کنید وگرنه توی بخش آخر ارور میده برای اینکه اگر حالا این بخش آخر توضیح میدم اول که مربوط به حالا یه سری غذا ۱۰۱ غذا یه نمونش اینجا هست و حالا لی
28
+
29
+ پایین همبرگر نوشته دیتا ست خیلی راحته صرفا اسم دیت انتخاب برمیدارید بعد میشه سریع انجام بشه یه تعداد انتخاب انجام دادیم که حالا تست نمونه دیدیم حالا تاب برای اینکه حالا
30
+
31
+ لیبل رو حالا یه آیدی خروجی کلاً کار می‌کنه اینکه پچ پچ میکنه عکس رو نیاز نیست از این کارا بکنیم یه پروسسری همراه با خود مدل معرفی می‌کنن لود میکنیم افراد همون چیزی که مدل ورودی بدیم بدست میاد سه مدلی هم که انتخاب کردیم اینه ۱۶ در ۱۶ عکسامون باید 24 باشه روی نت ۲۱ کلاس شده اینجا حالا یه کاری که خوبه که بکنیم برای زمانی که میخویم بکنیم برای اینکه خیلی سریع مدل
32
+
33
+ خود عکس‌هایی که دارن تبدیل می‌کنیم نرمالایزش میکنیم که سریع انجام بشه تعریف میکنیم که انجام بدیم براتون نوشته ولی خب روالش خیلی ساده است چیز پیچیده ای نداره زمانی که میخویم در واقع انجام بدیم خب باید یه بچ بکنیم که بعد اونا رو بچه ها رو به مدل بدیم یه دونه کلاس تعریف کالکتور که فقط به پایین تر که ببینید کلاس که بدیمش خودش
34
+
35
+ پیچیده‌ای نداره خود ترینینگ اول مدل رو لود میکنیم در مورد لورا صحبتی نمی‌کنیم لود کردن مدل بالاتر اسم مدلی که تعریف کردیم حالا توی ها میتونیم نمونه اش ببینیم اینجا میتونیم بیاید داخل سایت فیس مدل سرچ بکنید نشده اینجا
36
+
37
+ روی هدف الان میاد
38
+
39
+ تبدیل بشن آره اسم مدله بعد خب اینجا وقتی که لودش میکنیم میگه که یه سری از وزن ها به صورت رندومشالله شدن باید از مدل استفاده کنید دلیلش اینه که اضافه شدن چون این کار میکنه به صورت خودکار خود پکیج ترنس میاد یه سری هد اون هدی که روی
40
+
41
+ انجام بدیم خب بعد از اینکه حالا مدل لود کردیم حالا الان بهش برمیگردیم یه تابعی کلاس ترینر باید تعریف کنیم که مدل را بهش میدیم بالاتر الان باید تعریف بکنیم دیتاچ بکنه تستمون با توجه به اینکه مدل اصلی ما شماره توکنایز باید بده و اون هم متریک ما که حالا پایین شده اینجا برای حساب میکنه خب برگردیم سراغ مهمترینش هم
42
+
43
+ آپلود میشه اینجا باید اون دایرکتوری اون اسمی که می‌خواید رو بهش بدید داخل ممکنه استفاده نشن یا می‌تونید بهش بگید که حالا استفاده حذفشون بکنه یا نکنه استراتژی اینکه داخل این پایین که داره چیز میکنه هر مرحله کار انجام که استراتژی همون بحث حالا سیو کردن مدل شما هر چند سیو میکنم که باین تا آخرش که بشه از بعدش سا ترین ولیشن
44
+
45
+ بیشتر برای زمانی که مدل شما بزرگ خیلی بزرگ نمی‌تونید انتخاب بکنید استفاده می‌کنیم به این شکل است که ۴ تا استپ صبر می‌کنه اون گرادیان‌هایی که در محاسبه میشن رو با همدیگه جمع میکنه بعد از اون چهار تا تموم شد تقسیم انجام میده این کمک میکنه که اگه سایزمون کوچیکه یک مقدار دقتش پایین تر میاد ولی خوب در واقع کمک میکنه که انجام میشه خیلی زیاد بکنیم مدل بزرگ باشه مشکل
46
+
47
+ دیتاکالیتور نه بر اساس این چیزی که ما اینجا تعریف کردیم معمولا مدل اجازه شروع مشخص مدل انتخاب کردم مدل مختلف
48
+
49
+ سمت چپم دستگاه مختلف تعریف می‌کنیم در نهایت به ۹۱ درصد دقت بود همچنان بشه حدود ۱۶ دقیقه ۱۶ دقیقه طول کشید اینم حالا برای اینکه مدلتون آپلود بشه روی ازش استفاده بکنیم خب یک خروجی هم از مدل ببینیم مدلی که به صورت شده یک دونه عکس برداشتیم که حالا اسمش اینه حالا تلفظشو نمیدونم
50
+
51
+ ادامه بدید اینجا اول پروفسور رولود میکنیم بعد روی اپلای میکنیم که در واقع همون کار پس سازی و دیتا تبدیل کردن روی هاپ و حالا این مربوط پای که در واقع لاجیک ها را میگیریم میتونیم کلاسی که حالا بیشترین احتمال رو داره انتخاب بکنیم و در نهایت هم لیبل نهایی را که این بار درست چیز کرد حالا برای یک روش ساده تر هم اینه که از استفاده
52
+
53
+ کلاس ما دوست داریم به اون حالت برسه ۹۲ قبل رسیدیم کامل لود بکنیم و
54
+
55
+ باید بسازید یا رایت یا حالا هر چیز دیگه بهش بدیم وقتی که این کار میکن اون چیزی که اول بود اینجا که لود بکنیم که را بکنید یه حالا یه چیزی برای شما باز کپی بکنید وقتی این کار بکنید دیگه شما را میشناسه که شما هستید اکانت دارید و با این توکن اصلی میتونیم مدل سراغ مراحلی که انجام خیلی مشابه هم هست توضیحات هم هست خودتون بخونید
56
+
57
+ اضافه بشه انجام میدیم تعریف میکنیم اینجا در واقع بخشی که متفاوت است شروع اول اینکه یه تابع تعریف کنیم برای اینکه تعداد پارام را به ما بده کل پارامتر درصدی که این دو تا با هم دارند زمانی که مدل را به صورت عادی لود بکنیم که
58
+
59
+ تعداد پارامترها حدود شروع میکنیم حالا ساخت اضافه بکنیم اول از همه باید یک کانفیگ تعریف بکنیم استفاده کنیم از لو استفاده کردیم این همون رنگ ماتری چاق و لاغ است استفاده ۱۶ اینجا انتخاب ۱۶ آلفا در واقع پارامتر اسکیلینگ زمان ما در واقع به این معنی است که
60
+
data/LLM-Part1_transcript_part4.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ برای اینکه مقایسه بکنیم حالا کی یا چیزهای اضافه کنیم شبکه عصبی شبکه اضافه بکنیم باید نخواستیم تاثیری نمیذاره ماژول اون که اضافه میشه توسط خود زمانی که مدللود میکنیم اگر این رو اضافه نکنیم اون پارامتر فرض نمیخو
2
+
3
+ یک هم بزاریم بازم نسبتا خوبی میرسیم یعنی نیاز نیست بزرگ باشه توضیحاتی که بخونید در مورد خود لورا وکتور دوباره تعریف میکنیم که ما بسته خیلی بالاتر ببریم با توجه به اینکه کمتر میخوید انجام بدید پارامترهایی که میخوید استفاده کم میشه از ۸۰
4
+
5
+ جلسه چیزی که حالا کامل مشابه همدیگه اند فقط اینجا ۱۶ کردیم مدل ۳۲ لود میشن اینجا حالا ۱۶ انتخاب میکنیم سایز مدل کوچک شبیه هم اینجا فقط وجود داره اینه که لیبل ها هم باید بهش بده چون حالا این ساختار خود
6
+
7
+ خیلی متفاوت رو خودمون تعریف میکنیم که ما می‌خوایم در واقع تبدیل انجام میدیم چون فکر میکنم دلیلش اینه که اون خیلی که اضافه کردیم جدا از مدل حساب بشه اونجا زمانی انجام میدادیم خودش متوجه میشد که این کار باید بکنیم الان خیلی نداره و دوباره تعریف میکنیم دو مدل رو بهش میدیم تعداد فریم و تست دوباره که بسته
8
+
9
+ عوض میکنم مقایسه ولی خوب با این حال دقت خواهد رسید بعد دوباره اینجا مدل آپلود میکنیم یه چیزی که وجود داره اینجا ما مدل مدلینگ را آپلود بکنیم مدل بیس ما یک چیزی ما یک سری ماژولرا استفاده کردیم اضافه کردیم ما فقط سیو میکنیم و زمانی استفاده وصل میکنیم و چیزمونو انجام بدیم و چیزی هم که گفتم برای اینه که اینجا میبینید که وقتی دانلود شده کلا سه
10
+
11
+ مدل باید دانلود بکنیم مدل اصلیمونم که خب چک اصلی کرد با آپلود کرده مدل اضافه میکنیم اضافه میشن و در نهایت میرسیم به مدل پتمون که حالا میخویم انجام بدیم یه عکسی حالا اینجا هست که مشابه حالا یک نمونه هم از کلاس که بازم درست پیش بینی کرده نکاتی که وجود داره اینه که خب لورا حجم که ما در واقع در نهایت ذخیره کردیم خیلی کم شده مگابایته
12
+
13
+ یک چیز دیگه‌ای هم که هست ترینینگ اینجا ۵ دقیقه شده ۱۵ دقیقه توضیحاتی در مورد خود اون آر و پارامتر اسکیلینگ آلفا دادم و همین خیلی ساده داریم تلاش کردیم تست خیلی سریع خدمتتون معرفی کنیم و یه نمونه اجرای همینجوری خیلی سخت چند خط جزئیات البته دارند وقت بگذارید ولی
14
+
15
+ ویدیو های واقعی چه ربات های مجازی ولی اینجوری نیست که بتونیم بهش برس دانش صحبت بهشون بگم که کلا ها وارد بشن
16
+
17
+ برای چیزهای مختلف خودشون یه سری نمونه کد در اختیار میزارن لازم نیست همیشه از صفر بنویس دانشگاه استفاده بشه ولی فعلا یه مقدار زود آقا عرض خاصی جلسه بعدی باز خواهیم شد
18
+
19
+
20
+
data/LLM-Part2_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ به نام خدا دوستان عزیز ارجمند عرض سلام و ادب و احترام وقت همگی بخیر شادی خیلی ممنون بابت حضورتون که امروز جلسه آخر جلسه آخر حضوری مونه و میخویم مبحث به کارگیری موجوداتی که عمری کمتر از یک سال و نیم دارند و توی حوزه رباتیک اجتماعی یا کلاً هوش مصنوعی ببینیم و در حد توان هم سعی میکنم اینا رو ارائه بدم یه مقدار سرعت میگیرم بیشتر فقط برای اینکه شما بشنوید همچین چیزهایی وجود داره و ممکنه به جزئیاتش ورود نکنیم به دو دلیل یکی اینکه وقتش نداشته باشیم یکی اینکه تسلط کافی رو من ندارم یعنی اینکه خود منم در واقع تازه با بعضی از اینا اسماً
2
+
3
+ توانم خدمتتون ارائه امروزها می‌خوایم صحبت کنیم که اصطلاح مدل زن که با ویژن لنگویج الا شروع میکنیم حالت تاریخی داره ولی بعدش مراجعهین که واقعا از استفاده میکنیم که فقط من باید برم یه ویدیو رو در واقع با فلش جابجا کنم حد فاصله استراحته خدمتتون نشون میدم جلسه
4
+
5
+ امسال تعریف بشه یه همچین چیزایی می‌خوایم انجام بدیم ولی اینکه چقدر خوب در بیاد خودمونم الان نمیدونیم باید بریم مطالعه میکنیم که با چشم بازتری واردش بشیم ولی چیز جذابی برای اینکه ایجنت های رباتیکی داشته باشیم که از مالتی مدال در واقع ورودی ها استفاده بکنند و خروجی های از این جنس داشته باشند و از استفادهتی یعنی چی زمانی که ورودی خروجی یا هر دوشون از جنس های متفاوتی باشند میگن شما تو مطالعات مالتی قرار دارید مثلا فرض کنید ورودی تو تصویر باشد عکس میدادیم میگفتیم زیرش توضیح بنویسید یا عکس بدیم
6
+
7
+ عکس تولید کن یا اینکه عکس و نوشته بدیم یه سوال ازش بپرسیم در عکس زیر چند تا تخم مرغ عکس ورودی یه نوشته ورودیه خروجی باید یه عدد از جنس تکست بده اینا همه از جنس چی‌اند مطالعات مالتی مدل حالت‌های مختلفی برای مالتی مدل ها دیده شده اون چیزی که ما امروز می‌خوایم در موردش بحث کنیم تککسچوالی مادل یعنی اینکه حتماً توی ورودی از نوشتار استفاده میشه به اون چیزم مدل مدل حالا الم من حتما بخش زبانی داره ولی حالت های دیگه هم دیدن که ما الان بحثی روش نمی‌کنیم و هر کدوم میخوید میتونید بخونید انواع شبکه های که توسعه پیدا کرده از گذشته تا به امروز میتونید روش مطالعه بفرمایید خب خدمتتون عارضم که ما اجازه بدید چند تا درس بگیریم از اتفاقاتی که تو حوزه هوش مصنوعی افتاده
8
+
9
+ سال ۲۰۱۲ به اینور که الکس نت اومد به نظر می‌رسه که ویژن یه دفعه رشد کرد ۲۰۱۵ که رسیدن با در واقع رشد تولد و بعدش تقویت اونا ویژن به یه نقطه خیلی خفنی رسید به نقطه هایی که لرنینگ می‌تونست تو حوزه مثلا فراتر از انسان عمل کنه ولی اون زمان‌هایی که هنوز بین ویژن صوت و تکست خیلی اصطلاحا اتحاده به وجود نیومده فکر میکردن فقط دارن برای حقه خیلی ساده که سیگنال صوتی و اسپکتروگرم ازش بگیرید و به سود و عکس تبدیلش کنید یه سود تبدیلش کنید فکر شما دیگه بقیه از تکنیک های چی برید جلو برید جلو حالا یه اتفاق دیگه که افتاد و باز دوباره رفت جلوتر حوزه ان پی زد جلوتر و بقیه حالا
10
+
11
+ انجام بدن بعد در آینده‌اش یه عده اومدن خب اینا رو زدن تنگ هم گفتن که ما برای چی هر مدل زبانی یه کار فقط بتونه انجام بده یه مدل خوب بیاریم بالا که ده تا کارت با هم بتونه انجام بده بعد تازه داستانی که یه سری اتفاقاتی مثل ایمرجنت رخ میداد تو جلسه گفتیم وقتی تعداد شبکه های تو مدل ظاهر میشد که قبلا با همون روش ظاهر نشده بود و فق�� حجم زیاد دادگان و ترینینگ زیاد اونو به وجود آورده بود و خودشون هم خیلی دلیلش نمیدونستند و این داستان یونیفاید کردن یکپارچه کردن این ماجراها بود که منجر به تولید مثلا شبکه های مثل جیpt شد و در نهایت هم رفتن سمت اینکه یه جنرال پرپسستنت تولید کنند که حالا ابعاد مختلف
12
+
13
+ مطرح شد که وایسا مثلاً ما سعی کن به چه میدونم یه سری چیزا رسیدیم یه سری در واقع شبکه‌هایی از قدیم رسیدیم مثل رزنت و اینا که خوبن چه جوری میشه از ایده‌هایی که توی مسیر رشد ان ال پی رخ داد ما هم استفاده کنیم و ویژن اون قوی کنیم مثلا فرض کنید که همونطور که تسک های متنوعی اند میتونه باشه میتونه ترنسشن باشه میتونه نمیدونم مثبت یا منفی فلان موبایل خب اومدن تو شبکه های یونیفاید اومدن چیکار کردن کاری که همه اینا رو با هم انجام بده دیگه یعنی یه شبکه باشه که هر کدام میپرسین جوابشو بده خب به این فکر کردم که شاید توژن هم بتونیم همین کار کنیم یعنی شبکه بیاریم که نه فقط کلاسسیفیکیشن بکنه کارهای دیگه هم بکنه کارهای ویژ ها چی اند کلاسیفیکیشن که دیگه عصر الاغ
14
+
15
+ یکیش از حضور شما که خدمتتون عارضم می‌تونست چیز باشه در حد پیکسل بگه که این مثلاً تو این عکسه اینجا متعلق به گربه بوده اینجا متعلق به کوه بوده اینجا متعلق به چمن بوده خب و انواع تسک‌های دیگه‌ای که می‌شه تو حوزه چیز تعریف کرد مثلاً عرض به حضور شما که ویژوال کو که بهتون گفتم عکس بهش بدید یه سوال ازش بپرسید ایمیج کپشنی که عکس نوشته بشه تسک های در واقع یا ویژ یا دستگاه مالتی مدال باشه و یه عده داشتن به این فکر می‌کردن که چجوری از ایده که تحول الل ما داده رخ میده استفاده کنیم برای ویژش اینو بیاریم بالا و حالا سبب شد که مثلاً حدود ۲۰۲۱ شبکه به نام کلیپ بیاد بالا که اساس کارش ایده می‌گرفت از مدل های زبانی ولی توش نبود به اون معنا که از جی پیt یا لاما
16
+
17
+ از اینجا داستان و اون چیزایی که تا به امروز ادامه پیدا کنه و به یه نقطه های جذابی برسه که آخر ماجرا رو اول بگم این که شما تا الان تو حوزه‌های کاری خودتون تو حوزه کار کردن با ادوات مکانیکی ربات ها همه چی از جنس کد ورودی میدادید واقعا به این نقطه برسید که کلام بگید مثل آدم و اون همه اون کارا رو براتون انجام بده دقیقا کاری که حالا علی میخواد بکنه پزشک اینه که به ربات بگه برو صابون برام بیار همین یه جمله در همین حد بگید خدا نگهدار ربات دیگه باید هزار کار بکنه اینجا باید اولاً متوجه بشه چی گفت برای خودش ترجمه کنه مفهوم بفهمه باید بفهمه که باید بره سمت صابون بعد صابون کجاها میتونه باشه
18
+
19
+ سرویس بهداشتی تو آشپزخونه آشپزخونه کجاست یا چی میشه که من بدونم اینجا آشپزخونه است و و کوروش به دیوار می‌خواد کاری کنید شما که ایجنتا همزمان با شما باشد تا الان یه چیزی انجام خانمی داره توی فیلم تو درس چیزش همین مباحث ادونسش یه جایی داره دوستی داره فرض کنید اسمش الکسه خب این الکس مثلا ربات تیون میکنه که از اینجا بره اونجا دوباره برش میگردونه دوباره بره فلان جا دیگه میگیره میگه بچه ها نگاه کنید الکس داره بیشتر از ربات کار میکنه خب در حالی که ما هدفمون اینه که الکس برو اینجا برو اونجا فلان فلان و داده‌ها رو بگیره و بندازه توی مدلی که این کار بکنه درسته این رویای ماست که دارم تلاش میکنم بهش نزدیک میشن الان مدل های عرض به حضور شما آخری که گوگل هم داره ارائه
20
+
21
+ با نام‌های آخر اومده جلو واقعا دارم این حوزه رو می‌درن و گوگل کرده که تو حوزه رباتیک یک موجود بی‌رقیبی بشه که بتونه خیلی از تسک‌ها رو با کمک ایده‌ها همینه اجازه بدید بهش برسیم که چه حقه‌ای می‌تونیم بزنیم خب چه درس های به نظرتون ما گرفتیم و رویه فکری آدما از ۲۰۲۱ به این و این زیر ۳۰ سال اخیر چی بوده برای اینکه بتونن مالتی مدل ها رو بیارن بالا خب و دیگه آخریش که مثلا بلیط دو بوده مثلا ببینید که حالا ظاهرش فقط شاید تو عکس باشه نشونتون بدم که چیکار میکنه سعی میکنه یه حقه ترکیبی بزنه و اینا ولی هنوز
22
+
23
+ اندازه‌ای که فلامینگو مثلاً اینا دارن دیگه نیست خب خیلی خفن شدن خب بچه ها متناسب مالتی مدل های زبانی فقط نکست توکن بودن دیگه شما تکست ورودی میدادید از جنس تکست خروجی عکس نمیگرفت دیگه فقط نوشت شما
24
+
25
+ و اینجوری بود که میرفت از تی پی تی استفاده اولین چیزی که می‌خوایم در موردش صحبت کنیم اینه که ما سیر تاریخی دیدیم که چجوری از شبکه ترانس استفاده شد قوی بشن همین مسیر بریم جلو و ویژ لنگویج الا یا ویژ لنگویج مادلا رو که دی ال ام مخففش باشه رو ارائه بدیم پخته ترین ها نیست فقط من سیر تاریخی دارم میگم اینکه چیکار کنیم یه شبکه داشته باشیم که
26
+
27
+ جاهایی برسیم که مثلاً روزهای هفته کنار هم بیفتند نه تنها از این خفن تر این جمله با این جمله کنار هم یا این دوتا خیلی با هم فاصله دار بیفتند یه عده به این فکر کردن آقا اگه برای تکست همچین فضایی مثلا ده هزاری وجود داره که اینا رو میشه کنار هم قرار داد و متضاد قرار داد شاید برای ویژه هم وجود داشته باشه بریم پیدا کنیم یه چیزی پیدا کنیم که عکس مثلاً حیوونا یه جا بیفته عکسای میوه ها یه جا بیفته ایده اینه دیگه درسته آیا میشه این کارو کرد یا نه دیدن که بله میشه اولین شبکه معروف‌ترین شبکه‌ای که زدن و روش چند تا واریانت اومد و هنوز هم که هنوز کار می‌کنن شبکه‌ای بود به نام کلید خب که مخفف اگه اشتباه نکنم
28
+
29
+ شبکه معروفی بود که اومد و چند نوع واریانت روش زدن انواع اسم ها داره که با همدیگه میبینیمش این کلیپ ایدش چی بود خفن‌ترین شبکه کلاسیفیکیشن که تا به اون روز اومده بود چی بود رزتی بود که روی ایمیجمنت اومده بود بالا داشت حدود مثلا چه میدونم یک و نیم میلیون دو میلیون تومن عکس داده بودند که لیبل یعنی یکی آدم نشسته بود یه مشت آدم بیکار نشسته بودن برچسب زده ولی ما با خودشون گفتم کلی چند چند ده برابر چند هزار برابر عکس تو اینترنت داره خب خیلی بیشتر داریم ولی اینا لیبل لزوما نیستند چیکار کنیم از این اتفاقی که سوپر لرنینگ بود توی ال ما استفاده میشد از هر متنی از کلمه بعدی
30
+
31
+ کلی از این پیرها رو جمع کردن عکس و نوشته عکس و نوشته هر عکسی یه چی داشت یه نوشته داشت شبکه کلیپ چیکار میکرد شبکه کلیپ یک شبکه دوال انکودر بود یه اینکودر داشت که عکسو از توش رد میکرد تا بره به یک چی برسه حالا بردار چکیده و عصاره هزارتایی از یه ورم یه شبکه میداد اون متنی که شما داشتید که باز به یه امبگه یه بردار مثلاً هزارتایی دیگه اوکیه حالا حرف حسابش چی بود می‌گفت من یه سری لیبل هم ندارن اینا دیگه چیکار باید بکنم یه حقه میگ ببین من میام ۲۰ هزار تا ۲۰ هزار تا ۳۰ هزار تا ۳۰ هزار تا از این پیرها رو می‌گیرم تو بک سایز های تو یک بک سایز تو ۳۰ هزار تا
32
+
33
+ عکس رو از یک ترانسفورم رد می‌کنم که بخش ایمیجم باشه نوشته از چی از یک ترانسفورمر تا دوتاشون به یه امبدینگه مثلاً هزارتای�� فرزند جوری تعریف می‌کنم که دات این در دات این بره به سمت یک خب دات این با دات بقیه بره به سمت صفر دور بشه به این می‌گفتم کانترستینگ لرنینگ یه لیبل مجازی فیک داشتیم جمله اولش برن خیلی به هم شبیه بشن این عکسه با ۲۹۹ تا دیگه بره تا حد امکان دور بشه دوباره عکس دوم با جمله معادلش خیلی به هم نزدیک بشن و با بقیه دور بشن یه لاس اینجوری زد آقا این کار که کردن به این نتیجه رسیدن که اوکی من فقط بچه‌ها دقت کنید یک چیز نیست خب توکن کل ام کل جمله اول ها اینجوری نیست که جمله اول اگه خودش ۲۰ تا کلمه داره
34
+
35
+ سگی در بیابان در حال دویدن است هزارتایی داره ۱۱ این باید بره چی بشه لاسی که تعریف می‌کنه برای اینا یک بشه و داتش با بقیه صفر بشه که یه چیزی شبیه نیاوردیم و به این میگن کانتراست خب حالا بین بچه مصطفی نوروزی که مسیریابی ربات انجام میدن از این استفاده کردن به شبکه خیلی خوب رسیدن خب شبکه‌ای که قابلیت زیر و شات داشت مثلاً زرافه بهش نشون نداده بود تا الان ولی زرافه رو میداد البته تو کلاس‌هاش یه جایی برای زرافه دیده بود شانس اینکه زرافه رو بدون اینکه قبلا دیده باشه شناسایی کنه وجود داشت حالا تو تست فکر می‌کنید چجوریه فرض کنید
36
+
37
+ ۲۰ روز شاید بیشتر از ۲۰ روز روی مثلاً ۵۰۰ تا کامپیوتر با جی پی یوهای فوق خفن ران شده یه چیز عجیب غریبیه خب که تازه اولیشو کلیپ بعداً واریانت خوبیش این بوده که دیگه نیاز باشه آقا می‌خواید تست کنید چیکار می‌کنید دیگه شما تو تست نوشته بیابانه گل حتی خیلی تخصصی گل رز هلندیه چیکار می‌کنید فکر می‌کنید سوالم گل رز هلندی میاد بگید که چیه کلاسیفای کنید شبکه کلیپتون ترین شده به ذهنتون میخوره که تکست معادلی ندارید میرید تکستون رو میدید به
38
+
39
+ تمام کلاس‌هایی که شما دارید مثلاً ۲۰۰۰ تا ۵۰۰۰ تا کلاس باشید تک تک اون ۲۰۰۰ تا ۵۰۰۰ تا را از تکست انکرتون رد می‌کنید تا هر کدوم یه ام بدین بهتون دات میکنید نگاه کدومش بیشتر میشه و اتفاق عجیبی که افتاد دیدن که زیر که دارن میکنن مثلا روی دیتا ست ایمی چت خورده درصد دقت دارند خب اصلا شبکه های شات نداشتن شما نمیتونستی بهش گل رز هلندی و نشون ندی ولی ازش بخوای خب بعد تازه اومدن چیکار کردن اومدن یه حقه زدن که بتونن مقایسه کنن اومدن به مثلا نمیدونم شبکه های قدیمی یه چیز اضافه کردن یک اضافه کردن این لایه آخرش پاک کردن با یه لایه خطی جایگزین کردن و دوباره مثلا ترنسفر لرنینگ کردن مثلاً دیدن تو وان شات لرنینگ رزنت دقتش
40
+
41
+ شبکه چیز بود دو تا شبکه ترنسفور حالا بخش ایمیلش میتونست باشه بخش بالاش که ترنسپری و این میرفت این میرفت یه جوری خروجی بود براش که کمک کرد یه لاس فیک براش به وجود آورد که چیز کنه که یارو کنه فقط اینا رو ترین کنه ولی دیگه بعد که عکس میخوای بدی کلاس کنه تو دیگه لیبلی نداری
42
+
43
+ اونی که بالاتر میشه جواب البته این حالت با یک دونه زدن کلمه فراتر از اون ۱۰ تا مثلا ممکنه
44
+
45
+ کلاسی که میخوای داشته باشی حتما باید توی زمان ترینینگ بالاخره یکبار دیده باشه چون باید بتونه براش یه چیز تولید کنه یه دونه باید بتونه تولید کنه مثلا نمیتونه زرافه رو اصلا تو نوشتار بهش نداده باشه باید داده باشه یه جایی متن ضعیف کلمه در بیاره هزارتایی در بیاره تو تستش که بعدا دات کنه با اون یکی سامانه که قبلا دیده بودم الان نمیدونم چقدر استفاده میشه قبلا خونده بودم دیدید مثلاً یه سری مجموعه های هستند مجموعه صنعتی که شما وقتی وارد شی چیز تصویر ورودی تو میگیره یارو میکنه اجازه میده که در باز کنه اتومات یا نه فکر می‌کنید مثلاً چیکار می‌کردن اینا وقتی میخواستن بزنم ایده کان تو ذهنتون بیارید چی ذهنتون می‌خوره می‌خوام کارت وسیله
46
+
47
+ شبکه میکنه که یه ایده خیلی خام اینه که عکس مثلا محمد از مقابل و محمد از بغل دارم دات کنی خودش هزار یعنی خودشه اگه نشد این نیست ولی واقعیت که تو دنیای واقعی هیچ وقت اونی که شما به چشم میبینید ارتباطش خوب نیست همیشه باید برید چی از یه شبکه رد کنید به یه امبدینگ غنی برسه مثلاً از یه شبکه طوری میتونستم ردش کنن یه هزارتایی برسه اون هزار تایی ها را دات میکردن پیر خودش با خودش باس زیاد میکردن و با بقیه چی کمش میکردن حالا شما اومدی جلو عکس وایستادی یه دونه عکس قبلا بهش دادی عکس جدیدتو
48
+
49
+ عکس چیز استفاده شرکت بره یه صد تا کلاسه تهش امlp ترین میکنه ترنسفر همه رو فریز میکنه و یک بار هم با اون میره چون شبکه های قبلی هیچ نبودن این می‌خواسته یه چیزی ارائه بده که بتونه مقایسه کنه
50
+
51
+ لایه آخر جدید با تعداد کلاس‌های ما بذاره و لایه آخرشو فقط چیکار کنه و دیده که با این کار کردم خوب در نمیاد خب کلیپ که اومد یه دفعه یه تحولی به وجود آورد که تونست حجم زیادی از دیتا ست موجود در اینترنت استفاده کرد ولی به هر حال نمیتونست همه تصویر با هم حل کنه همین اومدن چند تا تسک با هم بهش دادن مثلا بالای ۳۰ تا تسک به خوبی تونست حل کنه کلیپ تو مود دیفالت خودش نتونست حل کنه ملت شروع کردن انواع کارها روش کردن من جمله تغییر دادن آبجکتیو فانکشن ها فقط به این در واقع کلمات نگاه کنید کلیپ اوا فیلیپ ریجن کلیپ
52
+
53
+ تغییر دادن لاسا با تغییر دادن آبجکتیو فانکشن های رو کلید نگاه کنید اگه خواستید یکیشو فقط بین اینا ببینید پیشنهاد یادتونه چیکار میکرد یه سری جمله بهش میداد ورودی ۳۰ درصد کلمات پاک میکرد و تخمین بزنه درسته بعد شما یه سوال ازش میپرسید باید در قالب برت میپرسید مثلا کو داشتید مثلا به انs نقطه چین بعد میزدی یاد گرفته بود که اون کلمه جا خالی را پیش بینی کنه دیگه حالا انشالله که یس و نوش درست برای شما پیشبینی می‌کرد خب و این کاری که مثلاً توبا کردن این بود که یه دفعه تعداد پارامترها رو بردن بالا یه میلیارد تا و از ایده چیز استفاده کردن ایده
54
+
55
+ استفاده کردن عکس‌ها رو پچ پچ کردن بعضی از پچ‌ها رو انداختن بیرون بعد گفتن که تو یاد بگیر چیزایی که ما انداختیم بیرون بازسازی کنیم بعد شبکه خیلی قوی شد و یه دفعه به شبکه رسیدن به اسم اوا که می‌تونست تسک‌های ویژن رو با هم حل کنه یعنی چند تا کار با هم بکنه نمیدونم چیز بکنه عرض به حضور داشته خب از منظر آرکتکچر کلاژدها قابل بررسی مثل کلیپ بود که دیدیم یه عده اومدن شبکه های ان کد یا پیژن پیشنهاد دادن که حالا باز در حد ساده فقط به هر کدوم اشاره می‌کنیم یکی از شبکه های که باز دوباره دقت آنچنان بالایی نداره مرز دانش نیست ولی شروع خط فکری بود یه شبکه‌ای بود به نام سین خب حرف حسابش چی بود خیلی ساده به داستان نگاه کرد و منطقی هم هست که نسبت به بعدی ها که میگن دقتش خوب
56
+
57
+ تلاش می‌کنم یه ترن مپی براش پیدا کنم که معادل بشه بیفته اونجا مثلاً عکس سیب وقتی ورودی میدم یه امبدینگ ۱۰۰۰۰ تایی براش به وجود بیاد بیفته نزدیک کلمه سیب تکست ده هزار تاییه طبیعتاً یه مپینگ لازم داره دیگه ها با چیز شبکه های کامولوشن میزنه میاد ��کسشو پچ میکنه و اینو به شبکه میده و مثلاً چی فرض کن ۹ تا توکن تولید میکنه این ۹ تا توکن فعلا تو فضای ایمیج باید چیکار کنید باید یه ترنسفورمیش پیدا کنید که شما رو ببره تو فضای تکست یه فضای ترنسفورمیش در واقع اینجا داره پیدا میشه میومده کانکت
58
+
59
+ تولید شدن و ترانسفورم شدن دیگه انگار رفتن تو فضای کجا فقط ماجرا اینه که سختی پیدا کنید که عکس سیبو میدی و پچ پچش می‌کنی به ۹ تا چیز می‌شکونی این ۹ تا چیز کنار هم انگار یه جمله است دیگه یه ترانسفورمیشن خوب پیدا کنید که جمله‌ای که از پچ های سیب تولید شده با اون جمله‌ای که در واقع در توصیف اینه تقریبا یه جا بیفته یا معادل بشه یه فضا بیفته و اینا رو کنار هم می‌داده یعنی توصیف عکسی که رفته تو فضای متن به همراه متن واقعی رو می‌داده وسی تلاش می‌کرده جمله بعدی تولید کنه مثلا فرض کنید کل عکسو می‌داده کلمه اول باید مثلا الان دو تا سگ خب مثلاً جمله باید این تولید میشده دو سگ قهوه‌ای و سفید داشتن توی مثلاً جاده خاکی می‌دویدن
60
+
data/LLM-Part2_transcript_part2.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ اول به نظر میاد که کل عکسو می‌داده و استارت توکنو می‌داده اون باید چیکار میکرده تو رو تولید می‌کرد بعد تو رو می‌داده به این به همراه اون ۹ تا پچه باید داگز تولید میکرده ولی آخر می‌رفته تا آخر جلو که این دیگه این شانس رو به وجود آورده که بتونه ویژوال کو انجام بده یعنی عکس بهش بدید یه سوال بپرسی عکس می‌شده بخش پچ اولش سوال جوابی که تولید می‌کرده می‌شده چی به وجود میوم نماد جواب اون سؤاله دیگه درسته و این اولین شانس که براتون به وجود حقه‌ای که میتونستید بزنید تا ویژوال کوسشن حل متوجه شد خب این البته سیم بعدی داره که معلوممه خیلی توقعش بالاست یعنی در واقع سریع
2
+
3
+ به هم بچسبه یعنی خود تکست رو نیاد درجا بچسبون به خیلی دیگه که خود اینو این کارو بکنیم مثل همون میمونه که دو تا عکس شما را اول دادیم گفتیم همین دوتا عکس دات کنیم اگه بالا شد خودتی اگه نشد خودت نیستی خب ولی به هر حال برای شروع شبکه بعدی شبکه کوکا بود که عرض به حضور شما خدمتتون عارضم که باز از کانت لرنینگ توش استفاده میکرد و این دفعه مثل سین ولی یک حرفه ای تر چیکار می‌کنه مثلاً یه عکس بهش دادی
4
+
5
+ فضای غنی شده خودش بره اوکی تکستتون چیکار می‌کنید از یک مدل زبانی میگذرونید تا اونم به شما یه ان کد از خود تکست بده ولی تا اینجا تکست هنوز عکس رو ندیده چطوری بود عکس تا یه چیز در حالی که اینجا اینجوریه که تست برای خودش میره بالا یه چند لایه میره بالا ایمیج هم چند لایه میره بالا حالا دو تا چیز غنی شده داره خب بعد چیکار میکنه اینجا یه حقه‌ای می‌زنه که یه شبکه‌هایی هستن به نام گروه وی آی تی نمی‌دونم اسمشو شنیدید یا نه میگه که ببین مثلاً عکسون فرض کنید ۱۶ تا پچ داره خب طبیعتاً باید من ۱۶ تا داشته یا یه
6
+
7
+ میگه ببین من کاری می‌کنم که همیشه این خروجی عکس‌ها به مثلاً ۱۰ تا در واقع ام بدین طور بشکنه همیشه عددش ۱۰ باشه صرف نظر ویدیوتون چند فریم باشه میگه چیکار کن یه سری توکن لرنb بزار تو شبکه واقعا میشه میره به تمام اون مثلاً فریم چیزهایی که از فریم ها در آمده توجه میزنه خب و با یه مکانیزم یه در واقع چیز میکنه جمع جبریشون رو پیدا میکنه و ترین میشه که مثلا میگم اون ده تا میشه ۱۰ تا عصاره مثلاً اولیش میشه سه برابر فریم اول به علاوه دو برابر دوم به علاوه هفت برابر دهمی
8
+
9
+ عصاره اول دوم تعداد دایره‌های آبی مثلاً فرض کن ۱۰ تا چیز خوب که عصاره به وجود میاد و فرقشم با قبلی اینه که صرف نظر از که عکستون ویدئوتون چند در چند یا چند فریم باشه چی میشه اینجا همیشه شما چی دارید یه تعداد توکن ثابت دارید مثلاً ۱۰ تا دونه حله که این ۱۰ تا دونه عرض کردم اومده با یه سری توکن های لرنبلی که رفتن به عصاره های اتند کردن توجه کردن و یه سری محاسبه در شدن و یه چیزی خروجی به دست اومده خروجی غنی شده این آبیه رو اینجا دارن حالا وقتی که این آبیه رو که عصاره ایمیجم باشه با شبکه یونی مدالم که از خروجی های شبکه های چیز میاد
10
+
11
+ چه عکسی می‌خواد حرف بزنه و سوال جواب بده اینجا دیگه شبیه چی میشه اینا کی و ولیو شبکه دیکودره میشن اینجا هم که ورودی‌های دیکودر خودش اومده بالا میاد هر جمله که میخواد بکنه با این آبی ها آبی ها میرن به چیزا ساخته بشه برای لاسش دو تا لاس در نظر میگیره یک لاس کانتراست لرنینگ داره مثل قبلا تو بچش نگاه میکنه مثلا فرض کنید هزار تا عکسه بعد کاری میکنه که نوشته این عکسه به این عکسه نزدیک �� از سایرین دور بشه خب یک کلاسش اینه یک کلاسش هم اینه که باز دوباره یک توکن سی الs و یه توکن ببخشید این
12
+
13
+ دستی به خروجی ایمیجه و خروجی تسته یه توکن دستی به نام cls به نام نارنجی اضافه میکنه کاری میکنه که این دو تا نارنجی خروج‌هاشون برای پیرها به هم نزدیک و برای غیرها چی باشه از هم دور باشه که چی من جمله رو تو ترینینگ دارم تا ته دیگه میدونم وقتی تو داگزه باید بعدیش چیه ظاهر بشه رانینگ کلمه بعدی تولید مثل قبلا که این تلاش کنه خروجی ران تولید کنه درست بعد که رانینگ تولید شد چی بعدی میشه این باید تولید بشه و این دو تا لاس که با همدیگه جمع میزنه شبکه به نام کوکا به وجود میاد که خیلی دقت مناسبی داشته و عرض به حضور شما میتونسته تسک های ایمیج بیس رو انجام بده من جمله و الی آخر حتی فکر میکنم میتونسته انجام بده یعنی که عکس بهش بدید
14
+
15
+ شما دارید صحبت میکنید خب سه تا آدم تو تصویر آدم قرمز بره اونو ببره بیاره بیرون یه شبکه بتونه فکر میکنم شبکه های از این جنس یا حالا برای نسل بعدی قطعا میتونست فکر میکنم میتون انجام چی کارهای بعدی عرض به حضور شما که کلا ها زمانی که اومدن اینجوری بودن اگه بخوایم خلاصه‌شون کنیم یه عده اینجوری بودن که از ایمیج و از تکست جداگانه هر کدام از رد میکردن تنگ هم میزدند و سریع لاس رو حساب میکردن یعنی
16
+
17
+ شبکه‌هایی بودند که شبکه‌های فیوژن بهشون می‌گفتن قبل از اینکه در واقع به لاس برسند خروجی ایمیج کد و خروجی تکست ان کد رو با همدیگه فیوز میکردن مثل اینجا که اومدن و اینا و تلفی میکردن بعضی از شبکه بودن ایمیجر و تکست ورودی رو تو ان کد میدادند قاطی میشد تلفیق میشد و در نهایت از تلفیقی تلاش میشد که دیکودر جنریشن انجام بشه و خروجی تولید کنه جواب سؤونو بده توصیف عکس بده مثلاً فرض کنید شما یه عکس گربه و سگ دادید که دارن با هم بازی می‌کنن بعد تو تستش نوشتید که دیسکرایب کن مثلا این عکس مثلاً int
18
+
19
+ ولی آخرین چیزایی که اومد که یه پله خفه تا اینجا بچه‌ها اسمی از ها نیست درسته مستقیما در مورد چیزا حرف داره میزنم هیچ وقت نگفت که از جی پی تی استفاده کن از لاما استفاده کن نسل آخری که اومده کار میگه آقا برای چی از ال ام های که موجودن استفاده نکنیم اینایی که روی چند ده ترابایت از اینترنت ترین شدن و همه چی رو بلدن یعنی تو تکست دیگه دویدن دیگه همه چی رفتن دیدن و میگه که چیکار کنید شبکه های نوع آخر بهشون میگن ادپت که استراحت میدیم و در موردش صحبت میکنیم اینجوری که بخش ایمیجش که میاد ان کد میشه بخش تکستشو ممکنه وارد یه ال ام بکنند خب و
20
+
21
+ کانکتورهای بین خروجی عکس و خروجی تکست و چیکار کنم یه کانکتورهایی به وجود بیارن اون کانکتورها چی شد از لاین خودش بره بالا یا با شبکه هایی که من از صفرش میکنه چند صد میلیارد پارامتر داره ولش کن بزار بره فقط خروجی های اینا رو برای اینکه به هم دوخت کنم دستی و اون کانکتور میکنم اد میزدیم فلان و اینا یه همچین چیزی فقط و اساس کارشون اینه و خیلی هم قدرت هاشون زیاد شده این چیزایی که الان صحبت کنیم ۱۰ دقیقه دیگه از این جنس یه دقیقه استراحت بفرمایید ۱۰:۳۵ دقیقه تا ساعت ما ادامه میدیم و بعدشم آقای چیزو
22
+
23
+ سلام مجدد عرض به حضورتون که نوشته‌ای نداره کجا باید بنویسه که خب عرض به حضور شما که سلام مجدد خدمتتون عارضم که رویای ما افق ما دورنمای ما یه همچین دو تا وویی که روز اول بهتون نشون دادیم دوباره امروز با همدیگه مر��ر کنیم اینکه چگونه در واقع دنیای مدرن هوش مصنوعی که الان بحث ها داغه
24
+
25
+ فیلم اینجوریه که به این ربات یک تکست فقط گفته شده برو چیپسو برام بیار برو چیپسو برام بیار خدایا این اتفاقایی که می‌افته اینه که مجموعه کارهایی باید بکنه باید مفهومی بفهمه چی گفته شد بعد بفهمه برای اینکه این تسک رو حل کنه باید چیکار کنه باید چند تا فصل بشکونش خوب برای در واقع چیپس رو بیارم اول اینکه باید چیپس رو پیدا کنن اصلاً چیپس چی هست به سمتش حرکت بعد وقتی نزدیک شدن بگیرمش این گرفتم خودش یه اکشن خب و تازه مطمئن باید باشم که گرفتمس وارد چیزش میکرد اذیتش می‌کرد یه بار دیگه پول رو بیارم پیداش میکنه چیپسه رو میره چیپس رو برداره
26
+
27
+ داشته خب این نقطه برسه این رویای آدم ولی این فیلم های که دارید میبینید در حضور شما بیشتر کار بچه گوگل درسته اینا خوب اولا خیلی رویاییه اینا فقط در واقع چیزهای موفق سناریو موفق دارن بهتون نشون میدن پیک های مختلفی اومد تو این زمینه ها ارتباط پیدا میکنه کلا به حالا چی بهشون بگو ایجنت های مجهز به ها همچین چیزایی و این کارهایی که بتونن انجام بدن
28
+
29
+ شما بنویس من میخوم چه کارهایی باید انجام دهم این واقعا الان این کار میکنه شماره مویسه که این کار بکن درسته بعد چیکار میکن حالا برای بقیه چک کنید مثلا فرض کنید میگه به سمت اون حرکت کن چیپس حرکت آره چیکار میکنیم میتونید ابزارهای مختلفی که دم دستتون رو صدا بزنید دمت گرم
30
+
31
+ آخر و از اون استفاده میکنم چیکار کنه بره این کار را انجام بده خب تو لول اولش تنها کاری که میکردم این بود فقط چیکار کنه تسک ها رو بشکونه به چهار پنج تا کار مختلف و دیگه وقتی انجامش میداد دیگه نداشت یه پله دیدن تسک انجام نشه مشکلی به وجود بیاید هیچ وقت نمیفهمه اومدن فیدبک میدادن یعنی چی یعنی این با ویژن خودش میرفت یه کاری انجام میداد که انجام شده خبر موفقیت انجام دادم که اگه لازم شه اون دوباره ریپ کنه برای شما ها و این پیپر های مختلفی زدن خیلی هم جدید ۲۰۲۱ شروع شده داره میاد جلو و کلا دو سه سال عمرشه و عرض کردم الان به آر تی ایکس رسیده
32
+
33
+ ببینید چیز میکنه طرف براش تایپ میکنه که نوشابه من ریخته چیکار کنم چی چی همچین چیزی نوشته اون میشکونه اول یک فایند کوک اول میرم مشابه پیدا میکنم دو پیک آپ کو برش میدارم ساب تسک داره میش تری گو توشک سطل آشغال اونجا تا اینجا تا اینجاش انجام چهار میدم اسفنج رو پیدا میکنم
34
+
35
+ ۵ می‌گیرمش یا ۶ پلان برات میارم خب یه همچین چیزی اومد خب که مثلا اولا اولویت بندی چاپ دستگاه چیکار کنه بعد از کجا بدونه که کسی موفق بود یا نبود فکر میکنم اگه اشتباه نکنم با چه احتمالی انجام بده و اینا یه چیزایی بوده که توش لحاظ میکردن و فیدبک می‌دادن به جان اجازه بده من برای خودم یه چیزایی نوشتم ببینم از شما که به این میگن ایجنت ها خوب سیکن از سمتژن هیچ فیدبکی به مدل داده نمیشده
36
+
37
+ سمت چپیه پایین خالیه بالا راست کنم بالاتر از سیکن باشه چون اون نمودارهای نگاه کن قرمزه که سمت راست تصویرش آورده و ویژنش توشه فکر کنم بالاتر یعنی فکر کنم مونولوگه مطمئن نیست یا مونولوگ بود پس من اشتباه نوشتم اینا دیگه خفن تر شده عرض به حضور شما که این سمت چپیه پس یه الگوریتم به روزتری بود که محمد میگه و اون یکی دیگه سمت راستی بالا ضعیف تری بود بین ارتقاش دادن ولی آخر ببینید اتفاقی که میفته آخر
38
+
39
+ استفاده کنید برای سه تا اتفاق باید رقم ��خوره یکی اینکه شما باید داشته باشید یعنی وقتی یک جمله کوتاهی میگید اون در حد یه انسان بتونه اگه لازم شد به ۱۰ تا ۱۰۰ تا زیر تسک بشکونه قبوله یا نه مثلاً شما به یه آدم وقتی آقا لیوان آب برام بیاد یا مثلاً لیوان قرمز خیلی چیزای دیگه تو خودش نهفته است آقا تو راه میری زمین نخوری لیوانای دیگه روشکونی لیوان آبیه رو برداری برو آب کن اونجا آب و و بیاری دست من برسونی ولی تو همین چند تا جمله چیزه میگ فقط یک ایرانیه که میتونه فرایند نمیدونم برو و این کار را انجام بده و ۱۰۰ هزار اینم بشور و بخر و بعد اینو به من برسون تو یک کلمه بگه اومدیا دقیقا
40
+
41
+ تعریف کرد باید بدونه که خوب انجامش داده یا نه و کجاش گیر کرده تو چه مرحله گیر کرد یا نتونست انجام بده لازم باشه پلنینگشو عوض کنه فکر اساسی بکنه مثلا گرفتن رها کردن برو به سمتش حرکت کن به مانع نخور درسته میتونه چیزهای ساده ساده باشه که وقتی تسک پیچیده شما میخوید انجام بدید همه این کار کنه حالا برگردیم سر درسمون عرض به خدمت شما که خب ما آخرین ورژنی که میخویم بریم سمتش اینه که واقعا از های قوی استفاده کنیم مدل
42
+
43
+ فکر می‌کنم که یه همچین چیزی وجود داره نمونه‌های دیگه‌ای که باز ما هست عرض به حضور شما مثلا چیز بدید عکس بهش بدید بگید چند تا سیب تو تصویره یه عکس بهش بدید نمیدونم یه ستون کادر قرمز آورده گفته بگو تو اون ستون قرمز چه اتفاقی افتاده یه عکس بهش داده گفته برو باندینگ باکس بکش دور آدماش و موقعیت دقیقا همون کار لوکالیزیشن برام انجام بده نوشته ها این کار برام بکن همچین و این عکس رو ورودی زده و ایندا
44
+
45
+ کار می‌کند باز دوباره از ساده‌ترین ایده شروع می‌کنیم که بهترین ایده نیست ولی در واقع را دست ترین ایده بوده مدل فروزن مدل فروزن حرفش این بوده که شما وقتی یه عکس میدی و یه نوشته خب برای نوشتتو برو از یک المان قوی رد کن و در ضمن هم نکن خب ولی یک ویژن اینکودر داشته باش که این عکسه که میره توش به یه چیزی تبدیل بشه که از لحاظ توکنی هم سایز توکن های خروجی المنت بشه و با اون قابل رقابت بشه یعنی یه جورایی اکثر بردی تو اون فضای ۱۰۰۰۰ بعدی المنت که این بره بهش بچسبونه و فقط این بخش تو آپدیت شه مثلا با صورت اول مثلا تولید شود بعد اسمال رد بوت آن حرف حرف تولید شه یا اگه سوالی پرسیدید عکس و سوال به عنوان ورودی شروع
46
+
47
+ انگار به جمله شما یه چند تا توکنی که از عکس اومدم میچسبونه و اینو میره از یک باز دوباره رد میکنه و براتون تلاش میکنه تولید کنه حالا تو ترینینگ بهش دادید یه سری چیزها را انشالله بگید که چیکار کنه انجام بده این اولین ایده بود که اومد و واقعاً هم همین به ذهن می‌خورد دیگه یعنی شما فضای ۱۰ ۱۲ هزاری خوب دارند تلاش بکنید که چی عکس هم ببری تو همون ۱۲ هزار بعد و انشالله بگی که اون چیزی که من بردار پیدا کردم با این هم سایزه یا این در کنار هم انگار به یک کلمه فکر جمله فکر تولید شده که در کنار همدیگه توکن ها میتونن این مفهوم پیچیده رو با همدیگه براتون پیدا کنن
48
+
49
+ شبکه قابلیت پردیکشن میکنه در واقع داره به سوال شما جواب میده این بوده که هواپیما رو داده بعد سوال پرسیده که چه کسی این را اختراع کرد جوابش برادران رایت بعد عکس موبایل اپل رو داده گفته چه کسی این را اختراع کرد این وان شات و این انتظار که بنویسه استیو جابز و داده جان تو تستش احتمالا خوبشو گزارش کرده خب بعد نمیدونم سه تا میوه بهش داده دوتا اول بهش گفته چی اند سومی و چیز کرده گفته تو بگو چیه و مثلاً یکی از اون دو تا قبلی بوده و تونسته بگه دیس گو ما دو تا شبکه بعدی داریم اصلا علاقه نداریم الان
50
+
51
+ ورود کنیم با جزئیات پیچیده هم هستند خب یکی شبکه فلامینگو اینا حرف حسابشون اینه که درسته در عین حال ظاهرهای شلوغی دارند ولی بخش خوبی از شبکه‌شون فریز شده است خب بخش آبی رنگی که می‌بینید فریز شده است یه بخشی داره که وقتی عکس ازش بهش ورودی اول بخش ویژه شبکه فریز میگذره مثلاً یه شبکه خفن تو این حوزه که قبلا ترین شده یا حتی از اینا پیچیده تر و این میره به یه جایی به میرسه قابل بحث که علاقه ندارم صحبت کنم دلتون خواست برید بخونید فلامنکو یه الگو داره الگوی دیگه داره و اینکه چجوری از این که از این الگویی که از عکسه در
52
+
53
+ دستم نمی‌زنم به خود دست کاری چیزهایی که بین وزن های که بین وزن های فریز شده محاصره میشدند فقط تلاش خوب جواب بده و عرض به حضور شما دسته آخر بودن در مورد برعکس صحبت کردم الان گفتم دو تا رباتی که دیدید بهشون می‌گفتن پله خفن تر میشه میخوید کاری کنید که ربات شبیه زندگی تو زندگی آدم ورود کنه یعنی با دستورات صوت ویدیو از خودتون بگیرید بگید این کار را بکن تمام شد یا حوصله تایپ ندارید یا وقت ندارید یا مثلاً پروگرم
54
+
55
+ زبان عامیانه انسانی به یک ایجنت بگید این کارو بکن این ایجنت واقعی و مجازی و سر راهش باید از ایده‌های مختلف می‌تونه استفاده بکنه میتونه فقط در حد پلنینگش استفاده کنه بقیه شد تقسیم کار کنه پول‌های مختلف ابزارهای مختلف جدا کنه یا اینکه شبکه‌هایی باشه که اینتگشن و عکس و تصویر از همون اول در هم عجیب بشه هنوز که کار میشه عمر زیادی هم ندارن کلا زیر دو ساله داره کار میشه و فکر میکنم باید در آینده نزدیک ازش خبرهای زیاد و جدیدی بشنوید و ادعاهای مبنی بر تاسیس است های تو سطح جهانی که ما می‌خوایم ربات های بسازیم که همه کار بکنند برای ما و عرض کردم خانم تنسی الان ادعا کرده که
56
+
57
+ سرمایه جذب کرده که گفته ما می‌خوایم کاری کنیم که هر رباتی هر کاری دلمون بخواد بهش یاد بدیم یعنی نه محدودیتی برای ربات وجود داشته باشه نه محدودیتی برای انجام آقا من تا اینجاشو نگه می‌دارم عرض به حضور شما که دو تا کار ربع ساعت داریم پیشرفت خودتونه و همینطور دعوت کردن که دانشجویان بسیار خوب پارسال درس ما بودند انجام دادن رو ارائه بدم که چجوری از همون دانش ارتباط ندارد که چجوری
58
+
59
+ خب آقای خدمت شما خوب حالا چیزی که در واقع یکشنبه دیدیم کاری که خیلی شبیه اونه فقط فقط رو
60
+
data/LLM-Part2_transcript_part3.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ کامپیوتر مدل زبانی توضیحاتی در موردش خب این نکته که وجود داره حالا مدل زبانی سایز خیلی بزرگه بخاطر همین سرعت عادی مدل که حالا توی را میکنیم معمولا به صورت کامل شدن با به صورت ۳۲ که هر پارامترتون به صورت نمایش داده میشه چهار
2
+
3
+ هست که حدود ۳ میلیارد پارامتر داره سه میلیارد اگه ضربدر ۴ بکنیم ۱۲ گیگابایت خب حالا روی کلاً بعضیاتون ندارید که این روش را بکنید بخاطر همین بعد از یک سری روش استفاده بکنیم برای اینکه حالا یه جوری سایز این پارامترها رو پایین بیاریم تکنیک خیلی خوب جواب میدهشن هست که به جای اینکه حالا هم به صورت ۳۲ بیتی نشون نمایش بدیم معمولاً اینجوریه که مثلا یه تقریبا هفت
4
+
5
+ سمت چپ عدد اعشاری میشه در واقع چیزمون و مثلاً ۲۰ رقم برای ۱.۲۳ صدم مثلا بقیه تعداد اونجا هست که خیلی از اینا در واقع نیازی بهشون نداریم می‌تونیم حذفشون بکنیم بخاطر همین یه سری روش معرفی شده روشی میتونه هم در زمان کلینینگ انجام بشه تی یا پست یا پیqوت که بهشزیشن
6
+
7
+ از اونا استفاده بکنیم و اینجوری سایز مدل را پایین بیاریم حالا روش‌های مختلفی مثلاً اینجا ۸ که معرفی شد مدل زبانی با ۸ بیت نمایش بدیم این باعث میشه که مثلا اگر این مدلی دارید که 4۰۰ فضا میگیره تبدیل بشه به خیلی کوچکتر میشه برای مدل زبانی خیلی شاخص میشه زمانی که شما میخوید مدل لاماس کوچک مدللود بکنید ۲۵ ۲۶ میشه اما زمانی که اینو به صورت ۸ در واقع لود بکنیم هفت میتونیم در واقع بالا بیار دکمه خودش در واقع
8
+
9
+ خروجی جلسه قبل هم گفتم که یه بار باید نصبش بکنید و استارت بکنید مدل مایکروسافت مدل مایکروسافت فای
10
+
11
+ ۱۶ ۱۶ بیت بدون هیچ مشکلی انجام میده منتها برای بیشتر از اون اینکه حالا ما چیزهای کوچکتر جدید هم داره دو چند مایکروسافت یک هم داشت یعنی شما سه تا مقدار بیشتر نداره مثبت منفی شما هنوز ندید و مدل تقسیم ۳ میشه خیلی کوچیک میشه سایزی که میخواد این دیت رو به صورت اتو ست میکنیم خودش میفهمه که ما چقدر جی پی یو داریم و چقدر جا میشه و بهترین حالت چیه اگر مثلاً ۳۲ جا نشه کوچک تبدیل میکنه به ۱۶ سایز مدل در واقع نصف میکنه
12
+
13
+ کوچک اگر میخوید که بتونید که حالا کوتو ساپورت میکنه مدل دانلود بشه اما ادامه که جلسه قبلی هم گفتم میکنیم
14
+
15
+ توکن‌ها بعد از اون کل سکس برنگردونه پارامتری برای خروجی ما چقدر میشه برای استفاده که بررسی کرده بودند که اگر بخواهیم مدل خلاقیت داشته باشه بی نهایت رندوم رندم
16
+
17
+ تجربه میشه مدل سمت راست که در واقع اشغال شده مدل ما سه میلیارد الان حدود ۱۶ رو
18
+
19
+ کمتر از ۵ ثانیه شد که حالا جواب خودش
20
+
21
+ اجرا کردند کل کدی که برای خروجی میگیریم زمانی استفاده
22
+
23
+ سریعتر باشه می‌خواد چیز بشه در واقع پکیج رو دانلود بکنیم مدل حالا لطف کردم که حالا اسم پکی است طرف یادم نیست که مدل را دانلود میکنیم خود و توی ترمینال حالا
24
+
25
+ اطلاعات در مورد دادن اطلاعات می‌پرسیم نوشته شده هر یک کنیم بیشتر میشه خروجی ازش پرسیده بود که وب سایت درست بکنیم شروع دادن جواب خیلی مشخص نبود جایی فکر میکنم اینجا به چه شک بود این خیلی گزینه خوبی اگر خودتون استفاده بکنید به صورت لوکال
26
+
27
+ و بعدش حالا دانلود که داره اینه که خیلی سریعتر پایتون و فای خیلی جواب و
28
+
29
+ حجمش نزدیک نمیشه دانلود خیلی خوبه فکر میکنم قرار است روی اندروید هم اضافه بشه این مدل
30
+
31
+ گوگل همون روزی منتشر
32
+
33
+ در مورد ارائه ویدیو جمع کردند بعد چها�� پارسال حدودا آخر یه پروژه استارت کرد که همه گروه‌های رباتیکی که مربوط به گل موبایل ارائه بدن یکجا بکنن
34
+
35
+ برای ربات هیت باشه یاد بگیره
36
+
37
+ دانشجو
38
+
39
+ داشته
40
+
41
+ ممنونم جلسه
42
+
43
+ داشته باشیم باز نکرده باشیم
44
+
45
+ سلام قابل رقابت های کامپیوتری
46
+
47
+ نوشتن نوشتاری فارسی داره و محاسبات خیلی ساده نرفتیم خیلی ساده توی تمرین واقعا انتظار
48
+
49
+ ساعت
50
+
51
+ سریع
52
+
53
+ از اونجا خانم حسینی در خدمتتون زحمت بفرمایید
54
+
55
+ در حین فعالیت‌های باربری اول موضوع اصلی هستش و یکی از روش های سنتی که واسه در این روش
56
+
57
+ یکی شبکه های عصبی استفاده
58
+
59
+ استفاده کردیم استفاده کردند
60
+
data/LLM-Part2_transcript_part4.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ استفاده کردیم هستش
4
+
5
+ مدل مدل ادبیات مقاله قبلی
6
+
7
+ مدل موازی
8
+
9
+ معماری هستش که آخر ببینیم
10
+
11
+ قابل مشاهده است
12
+
13
+ اضافه کنید
14
+
15
+ و در نهایت
16
+
17
+ بپرسید بپرس
18
+
data/MNIST_CNN.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/NumPy_SCR_Fa401.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/OpenCV_introduction_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ خوب به نام خدا دوستان عزیز و ارجمند عرض سلام و ادب و احترام در خدمتتون هستیم با معرفی بسیار بسیار مقدماتی از نحوه به کارگیری لایبراری یا کتابخانه open cv در زبان برنامه‌نویسی پایتون که بتونیم توسط اون یک کارهای ساده‌ای رو تو حوزه پردازش تصویر انجام بدیم اما ارتباطش به درس ما چیه در حال حاضر سیستم های اندازه گیری بسیار بسیار دارند از تکنیک های پردازش تصویر استفاده میکن یعنی اینکه مثلا شما سرعت یه خودرو رو بخوان اندازه گیری بکنند با یه مجموعه از در واقع تصاویر پشت سر هم یا ضبط ویدیو از اون یا اینکه بخوان توی خط تولید بدونند که مثلا ارتفاع ستون مایع توی مثلاً بطری چقدره آیا درست پر شده یا نه و یا اینکه توی فلان فضا چند تا از مثلاً فلان الگو وجود داره چند تا آدم چند تا از
2
+
3
+ مثلاً ظرف اینا وجود دارند الی آخر که میشه همه اینا رو با پرده تصویر انجام داد خیلی خیلی کارها داره میشه تو حوزه خودروهای خودران خودتون برای ما فیلم‌های ضبط کردید که نشون می‌دادید برای اینکه جاده رو پیدا کنه مسیر رو پیدا کنه به عابرهای پیاده نزنه ماشین و به چپ و راست بپیچه لاین عوض کنه به شکل مناسب از یکی از سنسورهایی که ازش استفاده می‌کرد سنسورهای در واقع دوربین های حالا عمق سنج بودن یا دوربین های عادی بودند و مجموعه اینا سبب میشه که خوب حوزه پردازش تصویر بسیار بسیار پرکاربرد باشه به صورت خاص این درس یا دروس مرتبط با این مجموعه توی دانشکده مهندسی برق و مهندسی کامپیوتر حالا دانشگاه های مختلف داره ارائه میشه من جمله شریف اما این دلیل بر این نیست که افراد از شاخه های دیگه با نحوه به کارگیری اون آشنا نباشند یعنی درسته که شاید شما نیاز زیادی هم
4
+
5
+ داشته باشید بعضی وقتا عمق ریاضی پشت ماجرا یا فرمولاسیون به کار رفته توی اینا رو بدونید اما بد نیست که توانمند باشید با تکنیک‌های مختلف اون و به کارگیری عملی اون در قالب نرم‌افزارهای مختلف کار بکنید یکی از سوپر معروف‌ترین لایبراری ها کتابخانه های موجود که ازش توی پردش تصویر استفاده میشه و در واقع چیز جهانی داره معروفیت جهانی داره یه در واقع لایبری به نام اوپن سی وی اوپن سی وی در واقع فکر میکنم مخفف اوپن کامپیوتر ویژ باشه و یه چیز در واقع حالا اون اوپنش نمادی از باز بودنشه و اینکه بسیار در واقع همه چیش در دسترسه سایتش میتونید ببینید اوپن سیv org عرض به حضور شما تمام مواردی که لازمه توش وجود داره و یک در
6
+
7
+ هلپ بسیار بسیار مناسبی داره که شما نیازی ندارید هیچ چیزی رو حفظ کنید و میتونید از روی الگوهایی که ما در اختیارتون قرار میدیم الان کوتاه و یا از خود این برید از در واقع آموزش‌های این سایت استفاده کنید چه جوری نصبش کنید و چه جوری راه‌اندازیش کنید و از کجا شروع بکنید و الی آخر عرض به حضور شما الان این انتظار اولیه میره که کسانی که اینجا نشستن یه مقدار از پایتون میدونن یعنی فرض بر اینه که خب اوکی با پایتون آشنتی دارید و دارید میدونید این چجوری توش یک کدهای زدید قبلا اگر چه اوپن سی برای سی پلاس پلاس سی شپ جاوا ولی آخر هم اگر اشتباه نکنم در واقع چیز داره کتابخونه داره و میشه توی اونها هم از اوپن سی استفاده کرد اما الان تمرکز بحث ما روی در واقع چیز به کارگیری توی پایتونه برای اینکه اوپن سی تو پایتون تو راه بندازید خب اول فرض بر اینکه شما یه پایتونی نصب کردید مثلا من عرض به حضور شما پایتون ۳.۹ رو نصب
8
+
9
+ حالا می‌تونید هر ورژن دیگه‌ای حالا از سه به بالا رو نصب بکنید عرض به حضور شما برای اینکه راش بندازید یکی از دستوراتی که میشه توی ویندوز ازش استفاده کرد در واقع دستور pip instal open cv پایتون که عرض به حضور شما توی این سایت خدمتتون نشون داده شده و میتونید این دستور رو کپی بکنید یا این همین چند کلمه رو یا بنویسینش و کامنت پراپتون رو باز بکنید و اینجا پیستش کنید و اینتر بزنید و اون شروع میکنه براتون اگر در واقع حالا پایتون تو هم درست نصب شده باشه اینو براتون نصب میکنه اگرچه من قبلاً این کارو کردم و همپن سی براتون نصب میکنه و هم نامپای رو که توی کارهای پردش تصویر بسیار بسیار ازشون استفاده میشه حالا با فرض اینکه عرض به حضور شما این اتفاقات افتاده و ما نصب و انجام دادیم بریم ببینیم که چه میشه در حالت عادی با این کار کرد من خیلی فکر کردم که چه
10
+
11
+ توی زمان کوتاه حول و حوش یه ساعته بیشترین بازدهی رو برای شما داشته باشم آخرش به این نتیجه رسیدم همینی که می‌خوام خدمتتون اجرا کنم اینه من در حد چند خط خیلی خیلی ساده و ابتدایی و اینجا می‌نویسم بعد از یکی از در واقع مجموع داده‌های آماده‌ای که یکی از دوستان ما آقای مهندس فرخ کریمی آماده کردن توی گوگل کلب بهتون نشون میدم لینکشم خدمتتون میدم و اونجا میریم بقیه چیزا میکنیم و سعی میکنیم تند تند تا جایی که ممکنه روشون صحبت بکنیم و دیگه نیازی به نوشتن کد و طولانی شدن جلسه مون نداشته باشه برای اینکه شما اوپن کنید چه توی عرض به حضور شما خود با آوردن در واقع بالا رام کردن پایتون و یا اینکه در قالب یه چیز فایل در واقع کد میتونید با این شروع بکنید ایمپورت بکنید سیv تو رو سیv تو رو ایمپورت بکنید عرض به حضور شما
12
+
13
+ اگر درست نصب کرده باشید بدون هیچ اروری این اتفاق میفته و دیگه شما میتونید الان از مجموعه بی‌شمار در واقع توابعی که تو حوزه تصویر نوشتن و شما را بی‌نیاز می‌کنند از اینکه بخواید خودتون دستی کد بزنید یا یه سری ماتریس‌ها رو عدد رقم‌هاشو عوض بکنید براتون خیلی از این کارا رو آماده انجام میدن خب طبیعتاً ساده ترین کاری که اولین کاری که باید بکنیم اینه که بتونیم یه عکس رو لود کنیم دیگه ها یه عکس رو بیاریم بالا که بتونیم روش کار انجام بدیم پس طبیعتا اولین دستوری که در واقع باید به کارش بگیریم در مورد لود شدن یا رید کردن یا خوندن یه عکسه خب دستور آی ام جی حالا این آی ام جی مساوی با دستور سی وی2 نقطه آی ام رید خب ایمیج رید پرانتز باز بسته از شما دو تا ورودی میگیره دو تا ورودیش اینجوریه که اولیش باید مسیر عکس
14
+
15
+ کامپیوترتون و دومیش با یه عدد که مثلاً صفر یا یک باشه مشخص بکنید که اون عکس چه جوری لود شه که اگه یک بزنید عکس رنگی لود میشه و اگر صفر بزنید عکس حتی اگه رنگی باشه سیاه و سفید لود میشه خب من مثلاً یه عکسو عرض به حضور شما بخوام چیز بکنم لود بکنم اینجا تست کجا رفت تست ایمیل اسلش ای دات جی پی جی و به صورت رنگی چیکار می‌کنم لود می‌کنم و می‌ریزمش تو یک متغیری به نام آی ام جی خب در حالت کلی عکس رو میدونید دیگه عکس یه سری در واقع ابعاد طولی و عرضی داره که بهش با نام پیکسل شناسایی میشه اجازه بدید من این
16
+
17
+ آهنگ الان خدمتتون نشون بدم تو خود البته چیزم میشه دید شاه تو خود پایتونم میشه بازش کرد حالا نشونتون میدم عرض به حضور شما این تست ایمیج رو بیارم من الان این عکسو که حالا یه خاطره‌ای هم دارید ازش احتمالاً توی جلسه اول درس اندازه‌گیری و جزوه جلسه اولمون اینو لودش کردم که یه عکس رنگی باشه اون محصولیه که گفتیم آخر ترم از شما در میاد و خب میخویم حالا روی این یک سری کارا مثلاً انجام بدیم خب این عکس مائه و این عکس یه سری ابعاد در واقع یه سری پیکسل در راستای طولی داره یه سری پیکسل ستونی داره و در مجموع یعنی ببخشید یعنی مجموعه پیکسل داره که با شماره های سطری و ستونی میشه شناساییشون کرد و روشون کار کرد و چون عکس عکس رنگیه هر پیکسل دارای سه تا کاناله که یکیش نماد میزان دخالت رنگ آبیه تو اون عکسه یکیش قرمزه و یکیش هم سبزه که خب سب
18
+
19
+ در مجموع اون رنگ به صورت یکتا در بیاد و خب اگر از دستور عرض به حضور شما آی ام در واقع ایمیج نقطه سایز استفاده بکنید img نقطه سایز من عکس رو الان ریختم توی متغیر i ام جی میتونید ابعادشو این سایزشو ببینید که میگه اینقدر در واقع داده دارم یه ماتریسیه که حاوی ۱۵۱ هزار و خورده در واقع دهی هستش و اگر بخواهید که به صورت خاص ببینید ماتریس چند در چنده میتونید با دستور آی ام جی نقطه شیپ پیدا بکنید که چنده میگه ۱۷۲ تا پیکسل ۱۷۲ ردیف پیکسل افقی داره ۲۹۳ تا عمودی داره و سه کانال داره که عرض کردم خدمتتون اینه که شما میتونید چیکار کنید عرض به حضورتون برید پیدا کنید که کانال مثلاً آبی و
20
+
21
+ سبزش حالا هر کدوم چین خب اگه مثلاً من چه می‌دونم بنویسم img فرض کنید مثلا صفر و صفر و صفر رو بزنم imd صفر و صفر رو فقط بزنم یعنی پیکسل اول رو به من البته اجازه بدید خود آی ام جی اگه بزنم مثلا میبینید که در واقع هر کدوم از حالا اون پیکسلاش مثلا چه چیزی دارن چه در واقع مقادیری دارند خب و عرض به حضور شما که مثلاً اعدادی که برای هر چیز به من میده اعدادی که برای هر کانال به من میده از بین صفر تا ۲۵5۵ اند و نماد شدت دخالت عرض به حضور شما اون چیز
22
+
23
+ شدت دخالت رنگهای تاثیر قرمز و آبی و سبزن توش که از صفر تا ۲۵۵ می‌تونه تغییر بکنه همزمان صفر بودن هر سه تا نماد اینکه اون پیکسل سیاه رنگه و همزمان ۲۵۵ بودنش اونی که دیگه سفید رنگه و تمام نور توش حداکثر شدت خودش قرار داره اونجا و طبیعتاً رنگ مثلاً قرمز خالص اینجوری میشه که دوتاش صفره یکیش ۲۵۵ خب شما احتمالاً اصطلاح آر جیبی رو شنیدید که مخفف بلو باشه اما توی اوپن سی با این فرم فعلیش اینتنسیتی ها به صورت بی جی آر داده میشه یعنی اولی آبیه بعدی سبزه و بعدی قرمزه یعنی رنگ مثلاً ۲۵۵ صفر صفر نماد آبیه حالا این که چجوری میشه آر جیبیش کرد راه‌هایی وجود داره حالا توی کارامون باهاش روبرو هستیم خب خب در این حد الان آشنا شدیم که اوکی در واقع عکس از نظر
24
+
25
+ این پایتون یا از نظر کامپیوتر صرفاً یه ماتریسه یه ماتریس با کلی عدد دیگه که به ازای هر خونش سه تا عدد به من میده و به ازای تک تک پیکسل‌ها این آرایش سه گانه رو داره عرض به حضور شما خب اینم عرض کردم خدمتتون میشه روش کارهای مختلفی کرد من فقط یه دونشو الان خدمتتون بیان می‌کنم یکی اینکه خب عکسی که داریم یا تغییرات دادیم و چجوری نمایشش بدیم دستور cv2.ir شو ایمیج شو که توش عرض به حضور شما دو تا ورودی میگیره یکی میگه اسم پنجره که باز بکنم بالاش چی بنویسم و چه عکسی رو میخوید براتون عرض به حضور شما چیکار کنم باز بکنم اینکه مثلاً شما می‌نویسید که من می‌خوام عکس ایمیج با آی ام جی رو باز بکنم همون چیزی که ما توی آی ام جی ریختیم و داشتیم روش حساب کتابامون انجام میدادیم بعدا مم��نه یه سری تغییراتی داده باشیم و اسم چیز بالا سرش
26
+
27
+ ایمیج ۱ خب این معادل این تیکه سبز رنگه معادل اون جاییه که شما تو مطلب مثلاً برای در واقع فیگراتون اسم می‌ذاشتید و اینجا میگید چیو توش رسم کن خب اینو اگه در واقع اینتر بزنید چیکار میکنه برای شما رسم میکنه بالاش نوشته ایمیج یک و این عکس رو اون چیزی که ازش مونده آخرین بار که حالا ما تغییری هم ندادیم و فقط خودش لوت کردیم چیکار میکنه نشون میده میشه کاری کرد که ابعادش قابل تغییر باشه ولی الان مثلا فیکس شما نمیتونید بکشید در واقع ابعادشو تغییر بدید و این الان تو همون تعداد پیکسل های که داده ثابته که توی اوپن سی دستوراتی وجود داره که این قابلیت ها را بهش میده حالا من یه نمونه میخوام الان یه چیزی رو بگم بعدش بریم توی اون کد مثلا اولین کاری که میخویم بکنیم اینه که مثل همون کاری که شما توی پینت و اینا انجام میدید یا پاورپوینت با موس میاید یه سری خط میکشید دایره میکشید مربع میکشید اینو با کد انجام بدید به صورت کاملاً اصولی و بعدا حالا اینا میتونه کاربرد
28
+
29
+ داشته باشه مثلاً رسم مستطیل رو اینجا بدونید بعداً بهش می‌گید برو نگاه کن هرجا مثلاً عرض به حضور شما مستطیل‌های آبی رنگ با حداقل مساحت مثلاً ۱۰ تا ۲۰ تا پیکسل دیدی رو بیا برای من چیکار کن دورش یه مربع بیار یه مستطیل بیار چون من لازمش دارم این احتمالاً نماد مثلاً فلان چیزه خب یا مثلاً برو من یه عکس مرد یعنی چشم و مردمک چشم و فلان اینا رو با هم بهت میدم شما برو نگاه کن که چی مردمککش کجاست اون دور اونجا برام یه مستطیل قرمز رنگ بیار اون اتفاقی که میفته مثلا شما موبایلتون رو میگیرید از یکی عکس بگیرید میبینید دور چهره ها چی کادرهای قرمز رنگ میکشه خب اینا همون چیزی که شما دارید روی عکس در واقع یه مستطیل رسم میکنید دیگه عرض به حضور شما مثلاً فرض کنید من میخوام یه خط رسم کنم روی خطم میگم که بیا سی وی دو نقطه لاینو خب اجرا بکن این نقطه لاین یعنی که بیا یه خط برام بکش روی چی برام بکش باید یه سری ورودی بهش
30
+
31
+ میگه روی در واقع عکس img همون چیزی که حالا در قالب لودش کردیم و در قالب یه سری مجموعه ماتریس‌های و فلان و اینایی بود که توی img ریختیمش که همین عکسه بود بیا این تغییر رو بده عرض به حضور شما لاین دو تا نقطه شروع و پایان میخواد میگه از کجا شروع کنم از پیکسل چند و چند و به چه پیکسلی ختمش کنم میگه از پیکسل صفر و صفر شروع کن از گوشه بالا سمت چپ میشه و این شمارنده های پایتون از صفر شروع میشن دیگه خب برخف مطلب که از یک شروع میشه و مثلا به چند ختمش کن عرض به حضور شما به مثلاً پیکسل ۵۰ و مثلاً ۷۰ ختمش کن خب این تا اینجا میگید این عکس این چیز رو برام بکش عرض به حضور شما بعدیش باید یه رنگ رو بهش بدید با چه رنگی براتون بکشه عرض کردیم در حالت دیفالت بی جی آر از شما میگیره اینتنسیتی بلو گرین و رد رو مثلا من اگه بنویسم ۲۵۵ صفر و صفر یعنی چی خط آبی برام
32
+
33
+ و بعدی ورودی بعدی که ازتون می‌گیره ضخامت خطه مثلاً من ۵ میزارم یا ۴ میزارم خب و بعضی از این چیزا نگاه میکنید ننویسید دیفالت هایی دارند یعنی ارور نمیدن خب ولی بعضی چیزا نه ارور میدن اگه ننویسید که برید تو اون هلپ اوپن سی که خدمتتون نشون دادم تو مجموعه سایتش میتونید بعدا نگاه کنید حالا میگه اینو اینو انجام دادی کجا بریز مثلاً من میگم دوباره بریز توی چی آی ام جی یعنی رو همون عکسه این تغییرات که دیدی باز تو آی ام جی بریز خب و یه سری درایه‌های اون ماتریساش اصلاح میشن عددای دیگه میشن که من بع میخوام چیکار کنم اینو پلات کنم ببینم آیا تغییری کرده یا نه من اینو اینتر بزنم اروری نداد عرض به حضور شما یه بار دیگه چیکار میکنم سی وی دوت دات فلان رو اینو میبندم و عرض به حضور شما اینو یه بار دیگه اجرا میکنم حالا میبینید چه اتفاقی افتاد حالا یه خط آبی با یه ضخامتی چی شده برای من کشیده شده از گوشه بالا سمت چپ اومده پایین
34
+
35
+ شروع شده و اومده پایین تا یه جایی به اتمام رسیده خب با این توضیحات در واقع توضیحات عمومی دیگه بریم بقیه‌شو از روی نمونه کدهای حالا دوستمون آقای کریمی بگیم خدمتتون که زحمت زیادی کشیدن من این لینکو براتون اینجا کپی می‌کنم توی چت باکس چیز اینجا نگه دارید برای خودتون بعداً استفاده بکنید عرض به حضور شما از گوگل کلب استفاده شده خود اینجا در واقع نیازی نبود شما حتی پایتون هم نصب بکنید از خود پردازنده های گوگل استفاده میکنه روش چیزا لایبری های لازم نصب شده و میتونید همینجا خودتون ران هم بگیرید هر باکسی برای خودش علامت پلی داره و برای اینکه در واقع ران انجام بشه باید شما چیکار کنید اون پلی رو بزنید خب پلی اول که بزنید عرض به حضور شما یه سری فقط لایبراری اوپن کرده یکی ایمپورت سی ویدیو بوده که خیلی خیلی برای ما مهمه یکی نامپای بوده که ما خیلی جاها مجبوریم برای
36
+
37
+ عکس خالی مثلاً سفید یا سیاه طراحی کنیم بعداً روش کار کنیم یا کلاً فیلتر طراحی کنیم یا ماسک طراحی کنیم مجبوریم که خب از نامپای استفاده بکنیم گفته که نامپای رو من با نام ام پی از این به بعد صدا میزنم عرض به حضور شما مت پلادلیبو استفاده کرده که برای رسم‌هاش بوده اگرچه من دیدید مثلاً توی پایتون خودم از این استفاده نکردم و بعدا گفته من هر جا پی ال تی زدم چیز کن دیگه برام یه گونه از پلاتو رسم کنه معادل همون آی ام شو ما یه جورایی حالا با امکانات بیشتری بعضا و الی آخر گفته پرینت بکن که چه اوپن سیv داری استفاده میکنه گفته ورژن چهار یک دو رو دارم که حالا شما میتونید برید استفاده کنید خب باکس بعدی که ران بکنید عرض به حضور شما رفته چیکار کرده رفته که یه فایل عکسی که در واقع در مورد عکس لیونل مسی بوده رو از اینترنت دانلود کرده گرفته و عرض به حضور شما ریخته توی چی ظرفی به نام مسی
38
+
39
+ مسی الان یه آرایه است ابعادش ۳۴۲ در ۵۴۸ در سه است یعنی ۳۴۲ تا ردیف پیکسل افقی داره ۵۴۸ تا عمودی داره و سه کانال داره که مخفف همون رنگ‌های آبی و سبز و قرمزش هستند که این شبیه همون لود مان خب پس تا اینجا از الان یعنی عکسی داریم که به نام مسی سیو شده و ما می‌تونیم تغییراتمون روی مسی بدیم عرض به حضور شما بعدیش که ران کنم چیکار میکنه دستور استفاده کرده که جز کتابخانه متلیپ بوده و در کل تونسته برای شما عکس رو رسم کنه فقط اتفاقی که افتاده اینه که برای اینکه این کار را انجام بده با یه در واقع دستوری که تو خودش آماده هست میگه در واقع چیکار کن یک کانورت انجام بده عکس رو از کانال بی جی آر دیفالت ببر به آر جیبی یعنی دیگه نیازی نیست شما یه کد بزنید که فور آی از یک تا
40
+
41
+ فورجه‌ای از یک تا فلان بیا جای نمی‌دونم درایه‌های rogo b و جاشو عوض بکن و اینا ستون اول و دوم سوم همین دستورات آماده شما باید با یه خط کد بتونید این کارا رو بکنید کسی قرار نیست اینجا دیگه خودش کد بزنه و تا حد امکان چیکار می‌کنه از دستورات آماده استفاده میکنه این دستور این دستور میاد عکس مسیو در واقع کانورت میکنه از کانال بی جی آر به آر جیبی یعنی باز یه ماتریسی بهمون میده که با همون ابعاد و سایز فقط چی شده جای ستون های جای درایه های مربوط به جی آر یه جوری عوض شدن که دیگه اولی شده آر بعدی شده جی بعدی شده بی و این عکس رو به شما نشون داده گفته این عکس حالا گفته چیکار میتونید بکنید اولا دستوری هست به نام آی ام رایت ام رایت عکس رو برای شما سیو میکنه یعنی اینکه بعد از اینکه تمام تغییراتتون رو روش انجام دادید میخوید یه عکس رو برای خودتون داشته باشید دیگه آی ام رایت میگه سیوش کن با نام مسی دات پی ان جی و چی رو و اون چیزی که توی
42
+
43
+ مسی بوده رو برای من بیا چیکار کن در واقع رایتش بکن ترو داده که بدون مشکل این اتفاق انجام شده و شمام تو کامپیوترتون تو پایتون خودتون اگه انجام بدید تو اون فولدر مربوطه عکس ساخته میشه و عرض به حضور شما اینجام نوشته که اگه ال اس بگیرید حالا دستورات لینوکس نمیدونم چقدر آشنایت دارید لیست بگیرید یا معادل اونایی که توی داس کار کردن معادل دی آی آر اونجاست دیگه میخواد فقط ببینه که فایل مسی دات p جی هم ساخته شده خب همین نوشته که اینم ساخته شده و فلان فاز بعدی که در موردش صحبت می‌کنم همون چیزی که ما در مورد رسم خط و اینا گفتیم نوشته که دراینگ فانکشن و توش چیکارها میتونه بکنه عرض به حضور شما از رسم مستطیل و دایره و بیضیگون و خط و اینا میخواد صحبت کنه این دو تا کد رو در واقع ران بکنم حالا میاد برای من یه سری خروجی بهم میده که میتونم برم ببینم اینجا مثلاً گفته چیکار کن گفته
44
+
45
+ عکس با ابعاد ۵۱۲ در ۵۱۲ پیکسل با سه تا کانال برام بساز و همشو زیرو بزار ها یعنی چی یعنی یک صفحه کاملا مشکی اینو اگه سیوش کنید بعداً imriteش کنید یه صفحه کاملا مشکی ۵۱۲ در ۵۱۲ پیکسلی به شما میده بعد گفته که چیکار کنید یه بلولاین می‌خوام رسم بکنم این علامت هشتگ یا علامت شارپ که می‌ذارن توی زبان برنامه نویسی مثل پایتون سی شپ و اینا چیزن دیگه نماد کامنتن میگه چیکار کن میگه این آی ام جی بود که من ساخته بودم اول بیا همونی که عرض کردم خدمتتون از پیکسل صفر و صفر شروع کن تا پیکسل ۵۱۵۱۱ یعنی از بالا سمت چپ تا پایین سمت راست رنگ ۲۵۵ صفر صفر رو بزار عرض به حضور شما بی آر جی پس بی جی آر پس بلو خواهد بود با ضخامت پنج و اینو بریز توی آی ام جی یعنی چی یعنی اون صفحه سیاهه الان به چی تغییر پیدا کرد در دیگه الان یه خط آبی هم توش قرار داره علاوه بر اون
46
+
47
+ بیا یه کارای دیگه بکن باز بریز تو img بیا رکتنگل یا مستطیل بکش چه جوری می‌نویسی چه ورودی هایی میگیره میگه رو چه عکسی اجرا کنم روی i ام جی خب رکتنگلو باید گوشه بالا سمت عرض به حضور شما چپش و گوشه پایین سمت راستشو بدید مختصاتشو که ایکس و وای پیکسل ایکس و وای سمت چپ و راستشو بالا و پایینشو داده چه رنگی براتون بکشم 0255 صفر با ضخامت سه اینم اگه باز اینتر کنیم چی این تغییر رو توش میده که میره تو اون بوم مشکی رنگتون چیز میکنه عرض به حضور شما در واقع یه مستطیل هم رسم میکنه همین کار برای کشیدن دایره و بیضی داریم برای دایره میگه تو رو چه عکسی بکشم مرکز دایره کجا باشه شعاع دایره ام چند باشه با چه رنگی بکشمش و عرض به حضور شما یه چیز دیگه اینجا جلوش نوشته که منفی یک اینا توپش نگاه میکنید حالا حالت های داره که دایره رو تو پر بکشه
48
+
49
+ توخالی براتون بکشه که این تنظیماتش با یه عدد در واقع با یه چیز گذاشتن یه عدد مشخصی گذاشتن انجام میشه که دایره توپر باشه توخالی باشه همینجور برای در واقع الیپس یا بیضی دارید که علاوه بر شعاع در واقع حالا ما تو دایره یه دونه شعاع داریم اینجا یه دونه عرض به حضور شما شعاع چیز نصف قطر کوچک داریم نصف قطر بزرگ اینا رسم می‌کنید و یه ویژگی که دیگه هم داره میگه تا چند درجه براتون رسم کنم فکر کنم بشه ۱۸۰ تا ۱۸۰ درجه خب صفر تا ۱۸۰ درجه فکر میکنم معادل چیزه دیگه نیم بیضی الان برامون میکشه عرض به حضور شما حالا این باید ببینیم هر کدوم از تنظیماتش چیه مثلاً این صفره آیا زاویه اش با محور ایکس هاست اینو مطمئن نیستم الان خب و یه همچین چیزی پلیگان میشه که کشید باهاش چند وجهی چند وجهی اینه که خب یه سری نقاط بهش میدید مثلاً نقطه اول ده و پنج بعدی بیست و۳ اینا همه بر حسب پیکسل پیکسل در راستای ایکس پیکسل در راستای
50
+
51
+ و الی آخر و یه دونه با نامپای یه دونه آرایه ساخته به نام پوینت که این پوینت رو داره بعد میگه چیکار کن با دستور پلی لاینز بیا چیکار کن برای ما بهترین پلیگانو ازش بکش عرض به حضور شما باز دوباره اینجا می‌تونید تعیین کنید که نقطه اول و آخر رو به هم وصل بکنه یا نکنه با این حالا ترو و فالسی که نوشتید اینم فکر می‌کنم رنگش باشه که با چه رنگی براتون بکشدتش خب اینم پلی کردیم اینم ران شده الان هنوز ولی جایی نگفتیم نمایشش بده بعد میگه نوشته بهش اضافه کن چجوری نوشته بشه اضافه کنم دستور سی وی دو پوت تکست میتونه نوشته اضافه بکنه توی مطلب ممکنه آشنا باشید چجوری مثلاً ما به پلاتمون تکست اضافه می‌کردیم اینجا مشابه همونه اول شما باید تعیین کنید که فونت نوشتتون چیه بلکه فونت تعیین کنید دستور سی وی2 دات فونت که بزنید خودش تمام فونت های که براش تعریف
52
+
53
+ یکیشو انتخاب می‌کنید اینو می‌ریزید توی متغیری مثلاً به نام فونت یا هر چیز دیگه‌ای ممد هرچی دلتون می‌خواست می‌تونید بریزید بعد میگه چیکار کن سی وی ۲ تکست کن یه نوشته برام اضافه کن به چی به عکس ایمیج خب چون همیشه باید بهش بگید که رو چی برام اضافه بکن خب نوشتشو گفته open cv برام بنویس عرض به حضور شما میتونستید یه چیز دیگه بنویسید بعد توی مختصات ۱۰ و ۵۰۰ این کارو انجام بده با فونت فونت بنویس با سایز چهار بنویس با رنگ ۲۵۵ ۲۵۵ که سفید باشه بنویس و حالا تنظیمات دیگه هم میتونه داشته باشه میتونم نداشته باشه و همینجا تمام بشه این هم اگه ران بکنید عرض به حضور شما چون نریختیم تو چیزی حالا اینجا هم بهتون نشون داده گفته که آرایه نهایی که دادم یه همچین چیزی خواهد بود که خب نمیذاره البته همه رو ببینید سه نقطه خیلی جاهاش میذاره اگه پایتون آشنا باشید میدونید که حالا بعداً دلتون بخواد ببینید چیکار بکنید و در نهایت میگه چیکارش کن پی ال تی ام شو بکن برام
54
+
55
+ عرض به حضور شما سی وی ۲.convert کالرش بکن اون img رو کالرشو به چی تغییر بده از استاندارد بی جی آر به آر جی بی تغییرش بده بی جی آر تو rgb بزن و اینجوری چیکار میکنه براتون پلات میکنه حالا اون بوم سیاه رنگ اول که بود اون خطه رو کشید گردالی دایره توپر قرمز رنگو کشید یه مستطیل کشید نیم بیضی براتون کشید اوپن سیv هم اینجاش نوشت و چی در نهایت ختم بخیر شد و تمام شد و شما میتونید عکس رو سیو بکنید یا عرض به حضور شما چیز بکنید دیگه هر کاری دلتون میخواد باز انجام بدید روش مثلا چه اضافه کردن نوشته میتونه برای این باشه که فرض کنید توی عکس شما این قابلیت رو میخوید به نرم افزارتون بدید به صورت هوشمند که براتون بنویسه چه میدونم از این خط تولید داره هندونه رد میشه یا خربزه خب مثلاً دورش مستطیل بیاره و بالاش هی بنویسه که این کدومه حالا رفته پردازش کرده متوجه شده این کدومه و بعد از اینکه متوجه شد اینو اضافه بکنه خب این ساده ترین کاری که میشه کرد دیگه چی
56
+
57
+ در واقع بیسیک و ابتدایی روی کارهایی که میشه انجام داد خب یکی از کارهایی که میشه کرد اینه که میگه بیام یه پیکسلو بخونم چیزش چنده این حالا من این اشتباه رو کردیم پرانتز گذاشته بودم پرانتز نمی‌خواست یعنی در واقع مثلاً اینجا i ام جی اگه یادتون باشه مثلا میزنید آی ام جی ۱۰۰ و ۱۰۰ به من بده چنده خب آی ام جی ۱۰۰ و صد بهتون میگه چی بهتون میگه که پیکسل صد و صد حالا البته چون از صفر داره شروع میشه 11می و 11می مقدار اینتنسیتی هاش توی بی جی آرش ۱۹ ۳۷ و ۵۴ خب حالا شما اگه جایی دیدید مثلاً سه تا شد ۲۵۵ یعنی رنگ داره به سمت سفید میره اگه سه تاش نزدیک صفره داره رنگ به سمت سیاه میره و این تک پیکسل رو به شما میده که خب چه مقداری داره اوکی این شبیه خوندن یه درایه از یه ماتریس که تو مطلب هم باهاش آشنا دارید میگه پرینت کن پیx رو که بهمون نشون بده ۱۵۷
58
+
59
+ چیکار کن میگه مسی ۱۰۰ و صد رو بزار ۲۵۵ ۲۵۵ ۲۵۵ میگه آقا من دلم میخواد پیکسل شماره ۱۳ رو من کاری ندارم چه رنگی بوده تو بزار رنگ سفید خب دلتون می‌خواد این تک پیکسل سفیدش کنید بعد میگه پرینت کن مثل صد و صدو که بهتون گفته اول این بوده پی ایکس رو براتون پرینت کردم بعدش شده این حالا اگه تک پیکسل رو عوض بکنید ممکنه خیلی متوجه نشید که عکستون چه تغییری کرده اما تو مثال ادامهش میگه که یه محدوده از پیکسل ها رو عوض کنید میگه آقا به ازای آی از یک تا فلان به ازای جی از یک تا فلان مسی ۵۰ به علاوه آی و ۲۳۵ به علاوه جی رو چیکار کن بکن صفر ۲۵۵ صفر که گفتیم اگه این bgr باشه یعنی رنگ چیز بهش بده سبز بهش بده تو چه محدوده چون محدوده که بهتون گفته و اگه بیاید در واقع پلات کنید باز این شماره ۲۰ و آی ام شو فلان کنید این مسی جدید
60
+
data/OpenCV_introduction_transcript_part2.txt ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ریختیم دوباره تو مسی همون مسی مسی جدیده رو که پلات کنم چی میشه این بالا کله مسی الان چی شده یه مستطیل سبز رنگی به وجود اومده نمی‌دونم الان می‌بینید یا نه موس من روش قرار داره که توی عکس اصلیش وجود نداشته و شما می‌تونید اینجوری چیکار کنید این عکس اصلیش هم بیارم ببینید می‌بینید وجود نداشته خب می‌بینید که چی شده چه اتفاقی افتاده شما میتونید یه مجموعه پیکسل های اونجوری که دلتون میخواد اینتنسیتی رو مقدارشو چیکار کنید عوض بکنید خب عرض به حضور شما اینا رو گفتیم خدمتتون اینکه میگه که شیپ مسی چنده میگه عکس ۳۴۲ در ۵۴۸ در اینقدر پیکسلی با سه کاناله آر جیبیه در کل اینقدر درایه داره عرض به حضور شما بخش بعدی میخواد نشونتون بده که چجوری یه تیکه از عکس رو بردارید بریزید توی عکس دیگه بعد اگه دلتون بخواد کپی پیست کنید روی عکس اصلیمون و چیکار کنید ازش استفاده کنید گفته مسی که خودش یه مجموعه بردار بود برو پیکسل های
2
+
3
+ ۲۴۰ ۲۸۰ تا ۳۴۰ بخش افقیش و ۳۳۰ تا ۳۹۰ بخش عمودیش حالا عرض به حضور شما تا ۳۹۰شو چیکار کن بیا اینو استخراج کن این مسی یه چیز بود دیگه یه ماتریس در واقع سه بعدی بود درایه‌های مربوط به این ایکس و این وای و همه زداشو بریز توی متغیر به نام بال حالا این رفته دیده که این توپ تو این محدوده قرار داره خب چشمی هم میتونید ببینید مثلاً محدوده وایش الان میشه دید دیگه حول و حوش ۳۳۰ تا قبل ۴۰۰ خب و اینو گفته چیکار کن اینو بریز تو بال بال فقط میشه چی اگه بعدا بالا پلات کنید فقط میشه این تیکه توپه که شما جداش کردید و یه مقدار چمن های سبز رنگی که دورشن بعد گفته بیا مسی اون عکس مسی بود درایه اینقدر و اینقدرشو اون مجموعه مثلاً یه جای دیگه شو مساوی بال قرار بده ها یعنی چیکار کن یعنی بیا مثلاً اینجا یه
4
+
5
+ یه توپ اضافه کن برام یعنی بیا اون مقدار قبلیتو فراموش کن و این چیزی که اینجا دارمو جاش بذار فقط خب طبیعتاً می‌تونید حدس بزنید که این محدوده که شما انتخاب می‌کنید باید سایزش با سایز بال یکی باشه دیگه وگرنه بهتون پیغام خطا میده و بعدشم گفته چیکار کن برام رسمش بکن و این باز اگه اجراش بکنید مشاهده خواهید کرد که چی که علاوه بر این توپه شما یه توپ دیگه‌ای هم خواهید داشت حالا البته یک تمرکز کنید می‌بینید که اینجا رنگ این چمن با این چمن همخوان نیست به خاطر اینکه دقیقاً از همین اینجا بریده بوده خب و میتونین توپ رو هزاران جای دیگه هم توی تصویرتون اضافه بکنید حالا یه جای دیگه یه چیزی داریم که خب برو پیدا کن چند تا توپ تو تصویره یعنی اینم باز اوپن سی قابلیت های به شما میده حالا ببینم میرسیم یا نمی‌رسیم در موردش صحبت کنیم فاز بعدی که میخویم در موردش صحبت کنیم در مورد اسپلیت کردن یا مرج کردن چنل های عکسه که چجوری بیایم در واقع کانال های آبی قرمز و سبز رو از همدیگه
6
+
7
+ جدا کنیم و یا اینکه نه اگه کانال‌های قرمز و آبی و سبز و یه جوری داریم چه جوری به هم بچسبونیم با یه عکس رنگی تولید بکنیم خب دستور cv۲. اسپلیت چیکار میکنه میاد عکستونو به سه کانال بی جی و آر می‌شکونه من گفتم بریز توی بی و جی و آر یعنی در واقع کانال اول که شکوندی بریز توی متغیر بی بعدی تو جی بعدی تو آر عرض به حضور شما یا مثلاً حالا نمیدونم اینجا پایینش هست یا نه آره البته اینجا هستش میخوام نشون یه چیزی بهتون نشون بدم و دستور مرج چیکار میکنه دستور مرج میاد سه تا مثلا بی جی و آر و چیزشو ��یگیره به همدیگه می‌چسبونه و یه عکس براتون تولید میکنه شما اگه اینو اول اسپلیت کنید و بی وg وr بعد دوباره b و جی آر رو به هم مرجش کنید دقیقا همون عکسی میشه که قبلاً داشتیم یعنی اگه اسم اینو بذارید مسی یک اسم اونو بذارید مسی دو پلات کنید بغل میبینید هیچ تفاوتی با همدیگه ندارن اگرچه تاکید می‌کنم در حالت عادی ترتیباش rgb
8
+
9
+ نیستا یعنی شما اگر به جای بی و جی آر حواستون نباشه جی و بی بسازید می‌بینید مسی رو از در واقع لباس آبی اناری میندازید مثلاً توی چی قرمز قناری خب و می‌فرستینش مثلاً به جای چه می‌دونم از بارسلون دیگه می‌فرستینش اینترمیلان و این دیگه رنگ لباسش عوض میشه حالا یه همچین چیزی اگر در واقع میتونید برید ببینید گفته پرینت کن بی و بخش چیزشو بخش آبی رنگشو برای اون رسمش کرده از حضور شما اینجا باز کاری که کرده چیه گفته که حالا یه چیز یه حالا یه بخش های رو مث ایمیج دو نقطه دو نقطه و صفر رو به من بده عرض به حضور شما باز پرینت کن بی رو این به جای در واقع فکر میکنم دستور اسپلیت اومد از این استفاده کرده مشابه اون چیزی که ما تو مطلب داشتیم و
10
+
11
+ عرض به حضور شما فقط چیز نیستم مطمئن نیستم که این خود اون باشه دیگه چون عرض کردم آر جی بی نیست دیگه این بیه اشتباه یعنی نباید با بلو اشتباه بشه مگر اینکه شما کانورتش کرده باشید به مود آر جی بی خب عرض به حضور شما که مثلاً اینجا چی گفته گفته که تو ۲۴ گفته که مسی دو نقطه دو نقطه دو رو آها نه نه این صفره آره صفره اینجا بی هست دیگه همون ستون اولش این ستون همون درای اولشه پس همون بی رو میده بلو رو میده خب یکش نماد گرین دوش نماد رده خب اینجا چی گفته گفته بیا مسی دو نقطه دو نقطه دو رو صفر بزن یعنی کلا کانال قرمز و صفر کن حالا حتی اگه تو عکس هم وجود داره چی صفرش کن بعد بیا پلاتش کن شما میبینید دیگه تو عکس جدید اصلاً چی فقط دارید تم رنگ های آبی میبینید و سبز ها اصلاً قرمز وجود نداره انگار مسی رفته الانترمیلان و عرض به حضور شما با این اوصاف میتونید چیکار کنید میتونید در واقع این تغییرات هم رو کانال های عکسون بدید
12
+
13
+ یه بخش‌هایشو سبز حالا قرمز و آبی و سبزشو جدا جدا پلات کنید ببینید و یا اینکه چیکار کنید یا اینکه عرض به حضورتون یه بخششو آگاهانه تغییر بدید و هر اتفاقی که از این داستان می‌خواید رقم بزنید خب یه ماجرای دیگه هست حالا بعضیاش دیگه خیلی تخصصی میشه border اضافه کنید دور عکستون خب که اصطلاحا پدینگ هم بهش میگن من نمیدونم چقدر با حوزه‌های مثلاً دیپ لرنینگ و اینا آشنایت دارید ممکنه اونجا توی پیاده سازی مثلا روش های کامل نتورک اینا رو دیده باشید یا به گوشتون به خورده باشه اینکه مثلاً دور عکس بیاید یه سری چیزهای اضافه یه سری رنگ سیاه مثلا یه ردیف دو ردیف سیاه رنگ سیاه اضافه کنید یا هر رنگ دیگه ای به هر دلیلی نیازتون شده و خوب کاری که میشه کرد اینه که عرض به حضور شما این چیز این چیز رو به شما میده این توانمندی رو بهتون میده اوپن سی که بیاید دور
14
+
15
+ عکستون یه سری کارا انجام بدید مثلاً یکی از چیزهای خوبش اینه که بیاید کلاً یه مثلاً نوار قرمز رنگ دور تا دور عکس بذارید کلاً ها این کاری که می‌کنیم سه خط اولش رفته یه ایمیجی لود کرده که ما حالا اگه ایمیجمون تو کامپیوتر باشه میتونیم با اون دستوری که نشونتون دادم imd اینو لودش بکنید بعد چیزی که دستوری که به شما اجازه میده بردر براش بسازید یه دستوری به نام کپی میک�� border خب حالا من دارم روش وایمیستم هی داره چیز میاد یه چیزای دیگه کپی میک بو کپی میک بردر این دستوره میگه که حالا این نحوه پیاده سازیش هم کلی کلیاتشو بهتون میگم میگه رو چی اجرا کنم میگه رو ایمیج آی ام جی یک اجرا کن اون عکسی که لود شده عرض به حضور شما عموما چند تا عدد ازتون میگیره که از بالا و پایین و چپ و راست تا چقدر میخوید تا چند تا پیکسل میخوید حاشیه داشته باشید و چه در واقع بردر استایلی رو براتون اجرا بکنم کلی بردر استایل توی چیز وجود
16
+
17
+ اسمش رفلکته رفلکس ۱۰۱ رپ یکیش هم کانستند مثلا این کانستنت رو الان بریم ببینیم همه رو اومده اجرا کرده و پتم کرده‌ها خب همه رو اومده اجرا کرده رو پلات کرده و منم رانش کردم این عکس اولم بوده اوریجینال یه چیزی نوشته گوگل بوده بعد هر کدوم مثلاً ریپلیکیت که اجرا کرده این دور و براش میبینید یه اتفاقایی افتاده ریفلکت عینش چیکار کرده آینه ای شده کانستنت گفته که بیا چیکار کن مثلا یه نوار و چیز برده ثابت قرمز رنگ با این ضخامت دور عکسم اضافه بکن و این عکس جدیدتون رو سیو بکنید چی میتونید در واقع حالا داشته باشین و یه جا عرضه بکنید نشون بدید عرض به حضور شما این سابپلاتش شبیه مطلبه تو این زیر مجموعه p ال تی حالا که لودش کرده بودیم قبلا سابش مینویسه مثلا ما قبلا تو مطلب
18
+
19
+ دو سه و یک خب یعنی یه چیز دارم ساب پلات ۲ در سه یعنی شش عکسه دارم حالا برو عکس شماره ۱ ۲ تا شششو مقدار دهی کن اینجا نوشته ۲۳۱ همون معادل همونه یعنی یعنی ابعاد من دو در سه است دو تا ستون دارم برو اولیشو چی بزار اونی که اوریجینال بود بزار دومیش چی بزار اونی که ریپلیکیت بود خب و اینا رو حالا میتونید برید نمونه‌هاشو ببینید عرض به حضور شما کار بعدی که میشه کرد یه سری کارهای جمع و تفریق کردن حالا به صورت خاص جمع کردن و تلفیق دو تا عکسه اینجوریه که فرض کنید دو تا یه ایمیج یک رو میگیرید مثل همون عکس مسی خودمون بوده ریختش تو آی ام جی یک یه دستوری داریم به نام فیلیپ خب فیلیپ چیکار میکنه حالا میتونه نسبت به مثلاً محور وای ها چیز کنهکستون رو متقارن بکنه جزئیاتی داره برید تو هلش نگاه کنید اگه این مث یکه رو تغییر بدید چه اتفاقی میفته این الان آی ام جی دو عکس
20
+
21
+ نسبت به محور وایها فیلیپ می‌کنه یا برعکس می‌کنه خب اگه مثلاً شما تو عکس داشتید به سمت راست نگاه می‌کردید تو عکس عکس دارید به چپ نگاه می‌کنید خب عرض به حضور شما دستور سی وی ۲ ad wited حالا به جز ادویتد یه چیز ساده‌تری هم داره فکر می‌کنم اد خالی بود الان یادم نیست ادویتد چیکار میکنه میاد این دو تا عکسو که آی ام جی یک و آی ام جی دو رو به صورت وزن دار با همدیگه جمع میکنه حالا یه فرمولی داره که چه ضریبی از چه ضریبی از دومی به علاوه ثابت گامایی بیان نمیدونم چیز کن تو اون ماتریس ها رو جمع و تفریق بکن یه ماتریس جدیدی به دست میاد که اسم اینو گذاشته دی اس تی عکس جدیدش بعد گفته دی اس دی رو برام رسمش کن الان گفته که هفت دهم یا ۷۰ درصد تاثیر عکس اولی و ۳۰ درصد عکس دومی که فیلیپ شده عکس اولی بود و بیا برام رسمش بکن که در نهایت چی شده به این عکسه منجر شده نمیدونم این عکسو دیده بودید یا نه توی سایت کورسرا و درس ماشین لرنینگ
22
+
23
+ اندروئینینگ اگه اشتباه نکنم اونجا من این عکس رو یادمه دیدم و یه همچین چیزی در واقع وجود داره عرض به حضور شما من فقط به زمانمم نگاه کنم حالا در چند دقیقه‌ای باهاتون باشیم ایمیل داریم که چ��کار میکنه مثلا فرض کنید شما توی عکس دارید میگید آقا من می‌خوام دور مربع‌های آبیم یه سری چی بیارم مستطیل برام بیار خب و شما چیز کنید عرض به حضور شما آبی ها رو برام جدا کن قرمز ها رو برام جدا کن میخوام ببینم که چیز دارم چند تا آبی دارم یه فیلت بزارم که مثلا فقط آبی ها رو بهم نشون بده اصلا تو عکس هر چیز مثلاً قرمز رنگ مشکی رنگ نشون نده یا بالعکس من میخوام یه سری چیزا رو شناسایی کنم تو عکس از رو رنگشون خب مثلا فرض کنید یه بلز جلوتون گذاشته شده شما با هوش مصنوعی میخوید پیدا بکنید که تیغه قرمز رنگش کجاست تیغه آبی رنگش کجاست مثلاً نوت دوره میفا سیش کجاست و خب ترشولد میذاید میگید که برو
24
+
25
+ عکس نگاه کن اگر در واقع فلان اتفاق افتاد اینو برای من مثلاً چیکار کن چیز کن اینو جدا کنیم منطقه رو بریز مثلاً توی عکس دیگه یا دورش یه مربع مستطیلی بیاد لازمش دارم به هر دلیل خب عرض به حضور شما که ترشولد باز دوباره اینجوریه که این سه خط اولش رفته یه عکسی از اینترنت دانلود کرده لودش کرده ریخته تو آی ام جی اینجوری اجرا میشه که مثلا گفته رت و ترشه یک و این دستور روش اجرا کن این الانش یک میشه عکس جدیدمون که هولد روش پیاده شده آستانه روش پیاده شده مثلا این چیکار میکنه عرض به حضور شما اینجا اگه اشتباه نکنم میگه عکس رو بگیر فکر می‌کنم عکسش مثلاً حالا احتمالاً سیاه و سفید بوده چی بوده فکر میکنم معنیش اینه که ۱۲۷ آستانمه هرچی بالای این باشه رو ۲۵5۵ بزار هر هرچی زیر این باشه رو مثلاً چی فکر میکنم صفر میزارره خب یعنی اینکه کاملا میخواد رنگ گری
26
+
27
+ که بگیره تو طیف سفید تا خاکستری و سیاه و اینا رو فقط چیکار کنیم فقط به شما سفید سیاه بده یعنی یا بله یا خیر اوکیه که گفته برای این باید سی وی ۲. tresh_ binary رو ران کنید خب این همونیه که فقط چی میشه دو حالت صفر و یک رو به شما میده یه دونه داریم ترش باینری اینف که اینور اون داستان یعنی اگه قبلاً قرار بود از چیز بعد ۱۲۷ مثلاً سفیدا چیز هرچی مثلاً نزدیک به سفید بود ۱۲۸ معادل ۲۵۵ بشه این دفعه بالعکس هم عمل میکنه و چیزای دیگه‌ای هم داره اگه دلتون خواست میتونید برید ببینید اینجا هم گفته که بیا همه اینا رو اجرا بکن اینا غروفیس های رسمشه چیز خاصی نداره گفته برو پلات کن برامون و در نهایت پی ال تی دات شو بهم نشون بده من اینو ران کنم میتونم بیام ببینم که ببینم نتیجش زیرش چی شده عکس اولم این بوده یه طیف در واقع پیوسته سیاه تا سفید بوده که وسط مساش خاکستری هم دارید میبینید این گفته
28
+
29
+ عکس برو هرجا دیدی اینتن سیتی یا شدت پیکسلا حالا تو من اینم بگم خدمتتون تو حوزه خاکستری دیگه سه تا کانال ندارم فقط یه کانال دارم عکس‌ها مثلاً اگه ۵۰ در ۵۰ در ۵۰ پیکسله دیگه ۵۰ در ۵۰ در یکه دیگه در سه کانال نیست که rg و b رو داشته باشه خب و عرض به حضور شما که چیکار کن میگه برو اینتنسیتی یا شدت هر تصویر رو ببین اگه ۲۵۵ بود یعنی سفیده اگه صفر بود یعنی مشکیه اگه بینش بود یعنی خاکستری هاست خب میگه برو نگاه کن با این چیزو ترشولد گذاشتم ۱۲۷ هر چیزی زیر ۱۲۷ کن صفرش کن هرچی بالای ۱۲۷ دیدی چی ۲۵۵ش کن سفیدش کن این میشه باینری این باینری این و که بالعکس عمل میکنه هر چیزی بالای ۱۲۷ و عرض به حضور شما سیاه میکنه هر چیزی زیر ۱۲۷ تا سفید میکنه و اونم حالت های دیگهشه که اگه دلتون خواست میرید حالا سرچ میزنید یا رو عکساتون پیاده میکنید تا ببینید چه اتفاقی میفته بحث
30
+
31
+ شلدینگ داره اینکه به صورت تطبیقی این کارو انجام بده اینا دیگه بچه‌ها جزئیاتیه که الان نمیشه روش بحث کرد نمونه کدش اینجا هستش و عرض به حضور شما میتونید برید دنبال بکنید که چه اتفاقی داره میفته و برید یکی یکی ببینید گفته اگه اورجینال ایمیج هم این بوده باشه یه صفحه سودوکویی که با دوربین مثلاً معمولی عکس گرفتم اگه می‌رفتید با باینری ترشولد گلوبال ترشولدینگ عادی رو انجام میدید همچین عکس بیخودی به ما میداد که کاری نمیشد باهاش بکنیم اما اون چیزی که مثلاً شما توی نرم‌افزار چیز دارین توی نرم افزارهای این عکس می‌گیرید برای اون امتحاناتتونو آپلود می‌کردید کم اسکنر و اینا می‌دیدید که بعضا عکساتون که این مدلی بود و این میومد چیکار می‌کرد و شما باید همچین حالتایی درش میورد خب که مثلاً ادپتیو ترشولد گوسین میزد روش و الی آخر که میتونید برید توی نمونه‌هاش اینا رو ببینید عرض به حضور شما بچه ها اگه اجازه بدید ما یه ربع دیگه ادامه بدیم و
32
+
33
+ بعدش کلاً حالا تا هرچی رسیدیم و بعدشم به اتمام برسونیم در مورد مطلب بعدی که می‌خوام در موردش صحبت کنیم جومتریک ترانسفورمیشن‌هایی که روی ایمیج میشه انجام داد اینکه میشه سایز عکس مثلاً چند برابر کرد اینکه مثلاً دستور cb2 resize عکس مسی رو میگیره و اف ایکس دو اف وای ۲ یعنی هم در راستای ایکس هم در راستای وای دو برابرش کن حالا باز عرض می‌کنم خدمتتون اینکه چه اینترپولیشنی استفاده کنه خودش یه دیفتی داره ولی به جای اینتر کیوبی شما چندین گزینه دارید یعنی بعد از اینکه مثلا چیز کنید یا تو هلپش نگاه کنید یا اصلا تایپش بکنید آیتم ها رو بهتون میده یعنی سی دو نقطه رو که بزنید بهتون میگه که شما چه گزینه‌هایی رو می‌تونید تایپ بکنید عرض به حضور شما اینا ریخته توی رز و اینو براتون پلات کرده که این از لحاظ پیکسلی اگه اشتباه نکنم باید از هم از در واقع هم از در راستای ایکس هم در راستای چی شده باشه عکس
34
+
35
+ دو برابر شده باشد خب بیایم پایین‌تر عرض به حضور شما در مورد روتیشن صحبت میکنه دیگه نیازی نیست خودتون بخواید در واقع ماتریس چیز دوران رو بنویسید در بیاد در تک تک درایه‌هاش ضرب بکنید و فلان اینا که بخواد روتیشن براتون انجام بده و کاری که میتونید بکنید اینه که با دستور ایمیج دات شیپ بیاید تعداد شیپ قرار چیکار کنه به ما چیز رو بده دیگه ابعاد عکس رو بده و عرض به حضور شما گفته اعداد به ترتیب تو راه و کالم بریز متغیر رو برای تعداد سطرها متغیر سی او ال اس برای تعداد ستون ها یه ماتریسی تشکیل داده بچه ها این به نام ام که توی کلا ترنس فورمیشن ها تو هم انتقال و هم دوران ما به این ماتریس مشابه ام احتیاج داریم دستوری هم که ازش میخویم استفاده کنیم سیv2 نقطه وارینه خب که توش ام نیاز داره اما ام ام که بالا استفاده کرده چیه
36
+
37
+ ۹۰ درجه داشته باشم دستور گت روتیشن ماتریکس دودی خب بیا به من ماتریس دوران دو بعدی یعنی دو در دو رو برام محاسبه بکن به میزان چرخش ۹۰ درجه اینو نمی‌دونم فکر می‌کنم مرکز دورانشه که مرکز دورانش کجا باشه حول مثلاً نقطه وسط بیا برو ۹۰ درجه بچرخون بعد این ماتریس ام رو بهم بده چیه بعد بیا بزن توی سیم روی عکس مسی ماتریس ام و اجرا کن حالا این ورودی کاز نمیدونم باید بریم بخونیم که این رو چه حسابیه یعنی چه ورودی لازم داشته و فاین یه چیزی می‌خواسته که اینو الان عرض به حضور شما ازمون گرفته و بریز توی دی اس تی و دی اس تی رو چیکار کن برای من نشون بده حالا عرض میکنم دیگه چون رفته تو از p ال تی داره استفاده میکنه آخرش داره چیکارش میکنه
38
+
39
+ بی جی آر تو آر جی بیش هم میکنه تو پایتون عادی بخواید برید جلو با همون آییم شو خودمون که بهتون گفتم این بدون plt یعنی سی وی دو دادید جلو دیگه نیازی نداره این تبدیل رو بزنید اگرچه عرض به حضورتون باید حواستون باشه که ترتیبتون بی جی آر خواهد بود و نه آر جی بی و این اتفاق سبب میشه که شما عکستون چی بشه به صورت سیستماتیک و کدی ۹۰ درجه بچرخه یعنی میدونم که شما میدونم که میدونید میشه این کارا رو به صورت دستی توی پاورپوینت یا مثلا پت و اینا انجام داد ولی عرض به حضور شما بعضی وقت ها نیاز دارید که کاملا به صورت سیستماتیک این کار انجام بدید که همیشه خودش مثلاً این قالب عکس ها رو این اتفاق رو براشون رقم بزنه جابجاشون کنه دورانشون بده که حالا در مورد چیزاش هم توضیح داده ریاضی داستان چیه اون ماتریس ام در عادی چجوریه که تازه این تو دو بعدش تو سه بعدش هم داریم روتیشن سه بعدی دوستانی که رباتیک کار میکن یا گذروندن عرض به حضور شما
40
+
41
+ دینامیک پیشرفته رو گذروندم حتماً با این ماتریس‌های دوران آشنا هستند مطلب بعدی که در مورد افغان ترانسفورمیشن کدشو می‌تونید الگو بگیرید اگه دلتون خواست استفاده کنید فقط جهت اطلاعات ترانسفورمیشن‌ها ترانسفورمیشن هایی که چیزن دیگه در واقع سبب میشن که هر دو خط موازی تو حالت جدید هم همچنان موازی باقی بمونند که مثلا یه همچین عکسی رو میگیره میتونه انتقالش بده به یه همچین عکسی بده بهتون تحویل یا پرسپکتیو ترنسفورمیشن هاست که میتونه کجا کمک کنه تو نمونش مثلا دیدید شما عکس کجکی گرفتید از این سودوکو بعد مثلا با تنظیم پارامترهای چیز پرسپکتیو کاری می‌کنید که اینو بگیره شما اینو بهتون بده و این خیلی عکس تمیزتریه برای کار کردن و یا در اختیار دیگران گذاشتن که این اتفاق میتونیم رقم بزنیم عرض به حضور شما مسئله بعدی در مورد چیزه در مورد کلاً کار کردن روی
42
+
43
+ عکس ساز حالا اعمال فیلترهای پایین گذر بالا گذر هموار کردنشون خب و این مجدداً خودش کلی ماجرای ریاضی پشتش داره یعنی دوستانی که میرن درس تصویر می‌گذارن یه ترم فقط همینا رو می‌خونن که خودشون به صورت ریاضی یاد بگیرن اینا رو انجام بدن یا توی مطلب کد بزنن یا تو هر زبان برنامه نویسی اگرچه عرض کردم اوپن سیv همه اینا رو در اختیار ما قرار داده اینجوری که عکسی لطف کردیم که این عکس گوگل باشه اورجینالش که نوشته ام جی بعد اینجور وقتا یه چیزی نیاز دارید به نام کرنل که یه ماتریس مثلاً اینجا ماتریس پنج در پنج بوده که همه درایه‌هاش یک تقسیم بر ۲۵ بوده یعنی همه درایه‌هاش یک بوده فقط برای اینکه در واقع حالا مجموع مثلاً درایان ماتریس هم یک شده باشه همه رو تقسیم بر ۲۵ کرده یه ماتریس پنج در پنج داریم بعد گفته چیکار کن بعد گفته مثلاً با دستور سی وی2 دات فیلتر توd برو روی عکس ایمیج کل رو اجرا کن اینم واگذار میکنم به خودتون برید
44
+
45
+ نماد چیه اگه نذارید یا بذارید مثلاً باید جاش چی بزارید چه گزینه‌های دیگه‌ای دارید و سبب میشه که یه سری اتفاقات رقم بخوره براتون و می‌بینید که عکستون از حالت شارپ یه مقدار تار شدن داره چی تغییر پیدا می‌کنه اگر اینو مثلاً عرض به حضور شما به جای ۵ در ۵ مثلاً ۹ در ۹ میذاشت و اینجا تقسیم بر چه می‌دونم ۸۱ می‌کرد اینو پلی کنید چه اتفاقی میفته عکسون باید تارتر بشه خب اینجا داره چه اتفاقی میفته داره میره یک جورایی داره میره چیکار میکنه یه مربع نه در نه میندازه رو عکس اول و میاد در واقع اون کل شما که همه درای هاش بود یک۸ یک ۸ یکمو در مقدار اینتنسیتی هر عکس ضرب میکنه اینا رو با هم جمع میکنه و یه عددی داره میشه که عبارتی میانگین گیری شده از خودش و اطرافیانشه باید سبب میشه که چی
46
+
47
+ رنگا تو همدیگه برن و این در واقع سبب میشه که چی بشه سبب میشه که شما عکس و تارتر ببینید و ما ایمیج بلرینگ رو داریم که چیکار میکنه میتونه در واقع بلر بکنه عکس و دستور آماده اینجا وجود داره به نام cb2.blere که که در واقع چیز عرض به حضور شما این عکسو برامون مجدداً همون تار میکنه مشابه اون اتفاقی که بالا افتاد باز دوباره میتونید روی این پنج در پنج بازی بکنید اگه سایزش بیشتر بکنید ببینید که تار بودن ماجرا چی میشه بیشتر و بیشتر هم میشه عرض به حضور شما که من اجازه بدین امتحان کنم فکر می‌کنم الان تقریباً تارتر شد خب و دیگه چیزهای دیگه هم هست که دیگه فکر می‌کنم حالا از بحثمون یعنی یه مقدار بحث تخصصی دیگه خب برای اینکه عرض و حضور شما مثلاً نویز های نمک فلفلی رو بگیرید چیکار باید بکنید و
48
+
49
+ اجازه بدین اینم آخرین مبحثی باشه که میگیم در مورد ترانسفورمیشن‌های لوجیکال باشه که دو تا مفهوم به نام اروشن و دایلیشن یکی چیکار می‌کنه یکی سبب میشه که این عکسو که مثلاً نوشته جی خب با یه ضخامت سفید رنگی رو بگیرید به شما اینو بده خب یه جی نازکتری رو در واقع بده حالا پشتش یه سری مواردی وجود داره که دیگه الان خارج بحثمونه روی این پنج در پنجش اگه بازی بکنید می‌بینید که در واقع یه اتفاق دیگه رقم میخوره مثلا اینجا ۹ در ۹ بزنید عرض به حضور شما که دیگه نامعلوم شد هفت در هفت هم بزنید یه عکس دیگه به شما میده ضخامتش کمتر از حالت قبله بیشتر از حالت ۹ در ۹ برعکس این یه ماجرا است به نام دایلیشن که معنی انبساط رو میده و این سبب میشه که شما این عکس رو بهش ورودی دادید این جی رو بهش ورودی
50
+
51
+ چیکار میکنه یه همچین چیزی رو به شما میده تحویل و موارد دیگه‌ای هم داره که عرض به حضور شما کاری کنید که توی بخش‌های سیاه رنگ اگه نقطه‌های سفید رنگ افتاد حذف بشن یا توی بخش‌های سفید رنگ اگه نقطه سیاه رنگ افتاد حذف بشن ها که اینا می‌تونه اونجور جاها به کار بیاد و عرض به حضور شما جزئیاتی داره حالا من دیگه متاسفانه بیشتر از این فرصت نمی‌کنم وقت بذارم روی اینا شایدم بعضا نیاز به یه سری مقدماتی داشته باشه خودتون میتونید روی نگاه کنید این که فیلتر چیز کل لاپلاسین رو بزنید که از جنس مرتبه دو مشتق مرتبه دو چه به شما میده یا سوبل رو اگه بزنید چه به شما میده مثلاً سوبل ایکس سبب میشه که خطوط افقی محو بشن خطوط عمودی باقی بمونن سو وای که تو راستای وای مشتق میگیره خطوط افقی رو براتون نگه می‌داره لاپلاسی هم خیلی تمیزتر
52
+
53
+ مشتق دومه و می‌بینید این عکسو بهش میدید اینو بهتون میده و هی جا کار داره دیگه می‌تونید برید ببینید در مورد hditection‌ها و هیستوگرام‌ها و مواردی از این قبیل که حالا متاسفانه فرصتش نیست و نگاه بندازید و ته ته ماجرا هم چی با اپتیکال فلو تمام میکنه که مثلاً شما بتونید یه ویدئو داشته باشید برید نگاه کنید که مثلاً چه اتفاقی برای چیز میفته یک عرض به حضور شما مثلاً جسم متحرک تو اون تصویر داره میفته که این توی سیالات ما خیلی کاربرد داره تو محاسبه سرعت کاربرد دار�� و اینا اونجاهایی که دیگه سبب میشه کاملا درک کنید چه در واقع سیستم های پردازش تصویری میتونن به شکل بسیار بسیار جدی وارد دستگاه ها و ادوات اندازه گیری بشن و عرض به حضور شما سیستم های
54
+
55
+ اندازه‌گیری خیلی خیلی جاهاشون خیلی هاشون لازم دارند که از چیز استفاده بکنن از در واقع سامانه‌های پردازش تصویر استفاده کنند چون دوربین‌های پردازش تصویر ارزونن اما فعلاً مهندس‌هاش گرونن خب از اونور چی لایدار مثلاً سنسوری که خب یه جاهایی دقت‌های زیادی داره میتونه داشته باشه به نسبت عرض به حضور شما پردازش تصویر ولی دوربین سنسورش خیلی خیلی سنسور گرونی یعنی اصلا نمی ارزه که روی ماشین سوار کنن مثلاً فرض کنید که دوربین شاید دونه‌ای مثلاً ۴۰ ۵۰ دلار در بیاد بعد بخوان مثلاً روی ماشین خودرو مثلاً ۶۰۰۰ دلاری حالا پنج تا ۱۰ تا هم نصب بکنن هیچ اتفاقی نمیفته مث ۵۰۰ دلار دیگه بهش اضافه میشه ولی لایه دارا میبینید که مثلا مینیمم هزینه های فعلیشون ۲۰۰۰ دلاره ۴۰۰۰ دلاره بعد شما شش تا سنسور لایدار نمیتونید روی ماشین ۶ هزار دلاری سوار
56
+
57
+ چند برابر قیمت خودش میشه و ارزش نداره و الان سیاست یه عده از غول‌های این حوزه تو حوزه خودروهای خودران اینه که تلاش کنند مثل آدم‌ها که با چشمشون رانندگی و هندل می‌کنند عرض به حضور شما اونا هم با دوربین‌های چی آر جی بی و آر جی بی دی این کارو انجام بدن خب بچه‌ها خیلی ممنون از حضور و تشریف فرماییتون من صحبت هامو اجازه بدید اینجا تمام بکنم عرض به حضور شما نمیدونم فقط میخوام متوقفش کنم چجوری میتونه این اتفاق بیفته اینو که تصویرمو چیز کنم متوقف کنم این را ببندم حالا آها اینجا رفته قایم شده خودم در واقع بردمش
58
+
data/Python_Basics.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/Python_Basics_transcript_part1.txt ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ نوت بوک پایچارم اسپایدر سابلاین تکست خیلی فرقی ندارن و حالا روی سیستم خودتون می‌تونید نصبشون بکنید و استفاده بکنید یه در واقع آناکوندایکیتور هم هستش که بعضی از این آیدی‌ها رو داره حالا می‌تونید اینجا مدیریتشون بکنید آماده داره اینا رو می‌تونید بدون اینکه نصبشون بکنید ازشون استفاده بکنید محیط‌های آنلاین هم هستند حالا مثل کلپ که مشابه همین هست که امروز ازش استفاده میکنیم ویژگی که این جوپیتر نوتک داره این هستش که اولا اینکه سلول به سلول میتونید اجرا بکنید به طور مجزا میتونید اجراش بکنید هر سلول رو و اینکه یکی دیگه اینکه در واقع می‌تونید تکست رو تصویر بهش اضافه بکنید کلپ هم مشابه هست با این اگه یه اکانت جیمیل داشته باشید در واقع میتونید ازش استفاده بکنید مزیتی که داره اینه که در واقع بار محاسباتی روی سیستم خودتون
2
+
3
+ از سرورهای گوگل می‌تونید استفاده بکنید و یه جی پی یو رایگان هم در اختیارتون می‌ذاره البته محدودیت داره دیگه در طول روز فکر می‌کنم از ۵ ۶ ساعت بیشتر اجازه نمیده که از استفاده یه سری دیتا تایپ هست توی مطلب توی پایتون که حالا با مطلب هم اشتراک دارند بعضی هاشون از اعداد شروع کنیم همانطور که میبینید سه تا متغیر تعریف کردیم دومی فلوت و سومی کامپلکس با دستور پرینت چاپشون کردیم و با فکشن تایپ هم میتونیم در واقع تایپشون رو نشون بدیم همونطور که میبینید تایپ پنج اینتیجر هست کلاس این تسک تایپ فلوت همونطور که میبینید کلاس فلوت هست و تایپ کامپلکس هم عدد کامپلکس تایپش کلاس کامپلکس است اپراتورهای ریاضی هم مشابه هست با زبان
4
+
5
+ موارد خاصشو اینجا آوردم توان رو با دوتا ضربدر نشون میدیم تقسیم که با اسلش هست دو تا اسلش میشه در واقع خارج قسمت خارج قسمت ۵ به ۳ الان می‌بینید که شده دو دیگه شده یک و درصد هم در واقع باقی مانده که در واقع میشه ۲ یه حالت کوتاه شده هم داره که توی لوپ و حلقه ازش استفاده کنید برای مثال ایکس که ۵ بوده پلاس مساوی یک میاد ایکس میکنه برای مثلا ایکس ضرب در مساوی دو هم باز همین شکل در واقع ایکس رو ضرب در دو میکنه که شش باشه ضرب در دوش میکنه در ایکس ذخیره اش میکنه میشه ۱۲ یه تایپ دیگه تایپ بولین هست در واقع همون ترو و فالس هستش که در واقع اپراتورهای منطقی رو با این میتونید بسازید ما اینجا دو تا تی و f رو ترو و تعریف کردیم و تایپشون همونطور که میبینید هستش
6
+
7
+ مثال ازش زدیم اینجا در واقع اندرو باهاش ساختیم تو اند فاست طبیعتاً چاپ میشه فالس دیگه و او رو هم داریم نات تو هم طبیعتاً میشه فارس یه علامتی اینجا هستش در واقع علامت تعجب مساوی همون مخالف یا متضاد هستش در واقع تو مخالف فارسی عبارت درست است بنابراین خروجی این یک خروجی بولین هستش یکی دیگه از دیتا تایپ‌هایی که داریم توی پایتون در واقع رشته استرینگ هستش که حالا سینگل پوشن تعریف میکنیم اینجا الان یه رشته هلو تعریف کردیم با تایپ همونطور که میبینید تایپش رو نمایش دادیم که تایپش اس تی آر هست کلاس s تی آر لنش هم طولشه که فانککشنی هست که طول در واقع استرینگ رو در واقع چاپ میکنه که اینجا پنج بوده دستور در واقع اینپوت رو داریم که میاد چیکار میکنه در واقع یه رشته رو دریافت میکنه در واقع اجراش بکنیم اون رشته رو دریافت میکنه خروجیش همیشه
8
+
9
+ بهش میدم سنو می‌گیره و مثلاً میگه که سال بعد چه سنی داره در واقع استرینگ هستش و یه نکته‌ای که اینجا هست اینه که ما وقتی که می‌خوایم در واقع یه رشته رو چاپ بکنیم برای اینکه متغیرها رو داخلش مشخص بکنیم چون متوجه که نمیشه در حالت عادی که ما چه متغیری داریم از استرینگ فرمت استفاده می‌کنیم چیکار می‌کنیم دو تا روش داره فرقی نداره اولیش اینه که در واقع شما میتونید استفاده کنید اول کار و متغیرها داخل در واقع آکولاد مشخص کنید که این در واقع متوجه میشه که اون اسم شما یک متغیر نه جزئی از رشته در واقع اینجا اندازه نیم را چاپ میکنه نه خود نیم رو یه روش دیگه هم وجود داره که در واقع جایی که متغیر داریم رو آکولاد خالی بذاریم و بعد
10
+
11
+ تهش با متد دات فرمت بیایم و به تعداد آکولاده متغیرها را مشخص کنیم یه سری متد داره استرینگ که حالا ما دیگه ازش رد میشیم ولی خب در واقع متد چی هست در واقع یه سری فانکشن هستند که در واقع شما می‌بینید چطور تعریف میشه اسم متغیر رو میارید دات و اسم فانکشن مثلاً استارت آپر چیکار میکنه میاد اون در واقع استرینگ که تعریف کردیم چیکارش میکنه یه متد فایند تعریف در واقع اینجا نوشتیم که در واقع چیکار میکنیم میاد کاراکتر ای رو در واقع ایندکسش رو تعیین میکنه که اینجا چاپ شده چند ۱ چرا ۱ شده بله چون ایندکس در پایتون برخلاف مطلب از صفر شروع میشه خط آخر هم نگاه کنید این در واقع خروجیش که بولین هستش در واقع اینجا نگاه کنید که در واقع استرینگ نیو توی در واقع متغیر اس
12
+
13
+ موجود داشته یا نه چون وجود داشته یا تورو چاپ می‌کنه اینم در واقع خروجیش بولین هستش خب متغیرهای در واقع گزاره‌های شرطی رو اگه بخوایم بگیم عبور کنیم از دیتا تایپ‌ها خب مثل زبان‌های دیگه مساوی داریم مخالف داریم کوچکتر مساوی کوچکتر مساوی بزرگتر و خوب مثلا یه نمونه‌شو می‌بینید دیگه اگه گذاره ما درست باشه تو چاپ میکنه و غلط باشه یه نمونه از در واقع گزارشی اینجا داریم همونف که همیشه داریم توی زبان های دیگه مثل مطلب اینجا با ایف الف و الس تعیین میشه نکته‌ای که داره اینه که در واقع اینجا ما پرانتز نداریم اصلا یعنی همه چی ما ایندنت مشخص میشه و اون دو تا نقطه رو هرگز نباید فراموش بکنیم ارور میده اگه این دو تا نقطه رو نذارید و نکته اینه که در واقع تعداد ایندنتش مهم نیست مهم اینه که در واقع همشون با هم برابر باشه این که پشتش میز
14
+
15
+ این از این یه اینو یه فرم در واقع یک خطی هم هست توی یک خط هم می‌تونیم اجراش بکنیم وگرنه همونه ولی تو یک خط می‌تونیم پیداش کنیم از گزارش عبور کنیم حلقه توی پایتون با وای و فور میتونیم اجراش بکنیم حلقه رو وای اینطوری هستش که در واقع یه گذاره مینویسیم و باز دوباره دو تا نقطه مثل همون شکلیه تا زمانی که این گزاره این شرط برقرار هست حلقه تکرار میشه و یه مثال ساده اینجا زدیم آی مساوی یک رو تعریف کردیم تا زمانی که آی کوچکتر از شش هست پرینتش میکنه و هر زمانی که از مساوی کشی شد در واقع خارج میشه از حلقه بریک و کانتینیو را هم داریم مثل مطلب و زمانی که شرط داخل بریک
16
+
17
+ از حلقه خارج بشه و قبل از اینکه یه مثالی که اینجا زدیم شرط مقابل وایل همیشه اینجا برقرار هست ترو هست زمانی که اون شرطمون برقرار بشه مشابه هست با مطلب کانتینیو هم همین شکلیه دستور فور تفاوتی که با وایل داره این هستش که در واقع این شکلیه که روی یک سیکوئنسی یه تکراری را انجام میده مثلاً اینجا ما یه لیست تعریف کردیم که جلوتر بهش اشاره میکنیم در واقع نکته‌ای که داریم اینه که میاد روی اعضای این لیست تکرار میکنه و برای مثال تو این مثال میاد پرینتشون میکنه و یه شرط گذاشتیم که زمانی که تایپش باشه بریک کنه چاپ نکرده و یه فرم دیگه هم هستش که در واقع یه تعداد مشخصی ما میخویم حلقه تکرار بشه از دستور رنج استفاده میکنیم که الان اینجا اومدیم در واقع از یک تا ۹۹ رو خود ۱۰۰ رو در نظر نمیگیره
18
+
19
+ از رنج ۱ تا ۹۹ رو اومدیم تکرار کردیم و ضرایب ۱۰ رو چاپ کردیم از دستور رنج استفاده میشه برای اینکه تعداد مشخصی در حلقه تکرار بشه خب ما کانتینر کانتینرها در واقع کالکشن‌ها رو داریم توی پایتون که شامل لیست دیکشنری تافل و ست هستش اینها در واقع می‌تونن مجموعه‌ای از متغیرها رو در خودشون جای بدن در واقع از لیست شروع بکنن تفاوتشون رو جلوتر میگیم در واقع یک کالکشن هست که میتونه در واقع هر متغیر رو داخل خودش جای بده حالا همونطور که میبینید الان ما هم اس تی آر داخلش داره هم در واقع اینتیجر داره هم فلوت داره کامپلکس داره بولین داره مقادیر تکراری میتونه بگیره اوردر داره ایندکس میگیره و دسترسی کامل بهش داریم یعنی میتونیم ادیتش کنیم میوتبل هستش در یک سری متد داره مثل اپند و
20
+
21
+ به آخر لیست یه مقداری یه متغیر رو اضافه می‌کنه یا مثلاً متد پاپ رو داریم که میاد حذف میکنه یه ایندکس مشخصی رو نکته‌ای که داره اینه که در واقع توی لیست مثل حالا آرایه‌ها حالا که توی نامپایی داریم میتونیم آدرس یه المان مشخص رو تعیین بکنیم با اسلایسینگ یا ایندکس مشابه هست با همون چیزی که توی مطلب داشتیم الان ما اینجا یه در واقع لیست تعریف کردیم رنج در لیست از صفر تا چهار هست تعریفش کردیم میبینید که مثلا اگه بخواهیم در واقع المان یک تا سه رو نمایش بدیم داخل براکت مشخص میکنیم ۱ تا ۴ این چیکار میکنه یک دو و سه رو چاپ میکنه آخری رو باز دوباره در نظر نمیگیره مورد دومی که میبینید در واقع میاد چیکار میکنه وقتی چیزی نمی‌نویسیم از اول لیست در نظر میگیره تا اونجایی که گفتیم یعنی الان میاد صفر و یک رو چاپ میکنه
22
+
23
+ وقتی ابتدا و آخرش را هم مشخص نکنی پل لیست را چاپ می‌کند و همونطور که گفتیم توی لیست هم طبیعتاً ایندکس از صفر شروع میشه نه از یک لیست کامپرینیشن رو داریم در واقع ما میتونیم حلقه داشته باشیم روی لیست همانطور که گفتم ولی اینجا در واقع مدل یک خطیش رو نوشتیم چیکار کردیم یه لیست تعریف کردیم از صفر تا ۴ اومدیم اعداد زوجش رو انتخاب کردیم و به توان دو رسیدیم ذخیره کردیم لیست دیگه چجوری این کارو کردیم توی یک خط در واقع داخل براکت نوشتیم ایکس به توان دو برای ایکس هایی که داخل لیست نامز هستند و در واقع باقی مانده تقسیم ش به دو صفر است یعنی زوج هستند این فرم یک خطی خیلی رایج هستش که در واقع استفاده میشه ازش دیکشنری رو داریم در واقع تفاوتش با لیست اینه که متغیرش به صورت زوج تعریف میشه یعنی کی داره و ولیو
24
+
25
+ زوج‌ها رو در خودش ذخیره می‌کنه و در واقع مقادیر تکراری هم نمی‌پذیره این تفاوت دیگرش با لیسته می‌تونیم مقادیرشو آپدیت بکنیم مقدار جدید بهش اضافه کنیم همونطور که میبینید با در واقع با کی‌ها می‌تونیم به ولیها دسترسی داشته باشیم و تایپش هم همونطور که میبینید تایپش در واقع کلاس دیکشنری هست یا کلاس دیکت و با کیس می‌تونیم به کلیدها در واقع دسترسی داشته باشیم و با ولیو میتونیم با مقادیر این دسترسی داشته باشیم آیتم هم جفتشون رو نشون میده ولیو میتونه چاپ بکنه حلقه روی دیکشنری هم مشابه لیست هستش با در واقع با آیتم میتونیم در واقع هم ایندکسشون رو بگیریم یعنی هم کی ها رو بگیریم و هم ولیو ها رو بگیریم و جفتشون تو این مثال چاپ کردیم تاپل یه در واقع دیتا تایپ دیگه هست از کالکشن ها که مقادیر تکراری در واقع قبول میکنه اما ایندکس ایندکس هم داره اما نمیشه ادیتش کرد یعنی در واقع ایم
26
+
27
+ هستش و زمانی که تعریفش کردیم دیگه نمی‌تونیم تغییرش بدیم که درش ذخیره شده رو و تایپشم همونطور که می‌بینید کلاس تاپل هستش یه دیتا تایپ دیگه هم داریم به اسم ست که در واقع مشابه با در واقع دیکشنری با آکولاد تعریف بشه این مقادیر تکراری قبول نمیکنه و در واقع هم نداره و حالا اینجا همینطور که میبینید یه ست تعریف کردیم و طولش رو مقدارش چاپ کردیم حالا چرا طولش شده ۴ فکر میکنید پاسخ صفر یکی و چون تکراری قبول نمیک با تافل پرانتز
28
+
29
+ جابجاشونم کرده و چاپ کرده چون اصلاً اردر نداره دیگه خب این از این ما میریم سراغ فانکشن ها فانکشن هم توی پایتون حالا مشابه هست با مطلب تعریف کردیم که باز دوباره دو نقطه رو داره و ایندنت مشخص می‌کنه که چه مقادیری داخل این تابع هست و مقدار ریتر کرده در واقع گفته که مثبت هست یا منفی یا صفر یه مثال دیگه از فانکشن رو نگاه کنیم در واقع یک فشن تعریف کردیم که یه آرایه میگیره و چیکار میکنه مقدار میانیش رو حساب میکنه و یه در واقع یه تابع بازگشتی هستش قبل از اون رو میریزه داخل آرایه در واقع لیست لفت بعد از اون مقدار میانی را میریزه توی لیست رایت و چیکار می‌کنه انقدر این کارو انجام میده از
30
+
31
+ به صورت بازگشتی تانک کامل این آرایه مرتب میشه از کوچک به بزرگ این از این یه سری حالت‌های خاص داره فانکشن در واقع که حالا من همشو اینجا نمیگم ولی مسئله یه حالتش اینه که در واقع کیبورد هستش در واقع ما میتونیم در واقع فانکشن رو که تعریف کردیم زمانی که داریم فراخوانیش می‌کنیم از در واقع از کیبوردهای خودش استفاده بکنیم این باعث میشه که ترتیب رو هم اگه رعایت نکنیم با ارور مواجه نشیم اگه از اسامی خود آرگمان های تابع استفاده بکنیم یه حالت دیگه هم هستش در واقع وقتی که اینطوری تعریفش توی تعریفش زمانی که مقدار بدیم در واقع به این آرگمان ها به ورودی ها زمانی که فراخوانیش میکنیم اگه مقدار هم ندیم همون مقدار دیفالتش در نظر میگیره همون چیزی که داشته رو که در واقع فراخوانی کردیم و چاپش کردیم همون ایران رو مثلاً
32
+
33
+ استفاده بکنید نیاز هست که از کلاس استفاده بکنید در کل هم توی پایتون همه چی بر اساس کلاس آخر میشم اول پلات رو بگم اولا که توی پایتون داریم وقتی نصبشون بکنیم استفاده کنیم دانلود میشن و نصب بشه که نصب بشه خودش میره و پیدا میکنه دانلود میکنه و نصب می‌کنه حالا مثلاً اینجا برای پلات از کتابخانه استفاده میکنیم ما این دستور در واقع دانلود و نصبش میکنیم نصبش کردیم یک بار بعداً می‌تونیم ایمپورتش کنیم و استفاده کنیم توی کلاب خیلی از اینا هستند
34
+
35
+ سیستم خودتون بار اول معمولاً باید نصبشون بکنید نحوه ایمپورت کردن چه جوریه در واقع دو شکل هست که تقریباً مشابه همن و خیلی تفاوت زیادی هم با هم ندارند الان مثلاً اینجا می‌بینید که در واقع من کردم در واقع ماژول پای پلالاتش رو از در واقع من اومدم از یه حالت کوتاه شده استفاده می‌کنیم که در واقع بعداً دیگه کل پای راست را مثلا ننویسیم فرم ساده استفاده کردیم یه فرم دیگه هم داره که مشابه همونه خیلی فرقی نداره در گفتیم و نتیجه یکسان تقریبا نام هایپورت کردیم دوباره نام های کتابخانه که در واقع کاربردش خیلی زیاده اینجا بهش اشاره نمی‌کنیم ولی حالا فکر می‌کنم یه سری فیلم گذاشتم براتون توی سامانه خب ما اینجا یه مثال ساده از در واقع پلات توی پایتون داریم اولا
36
+
37
+ مطلب نوشته شده مثل همون در واقع اومدیم با دستور ارنج با نامپای دات ارنج اومدیم یه بازه تعریف کردیم و سینوس و کسینوس را تعریف کردیم و با دستور plt.cot اومدیم در واقع این رو رسم کردیم باز مثل مطلب رو میتونید مشخص کنید در واقع محدوده بازه ایکس و ایگرگ رو میتونید با عکس تعیین کنید و در میتونید نشونش بدید حالا من اینو ران بکنم این یه مجیک کامند اینجا گذاشتم وقتی که اینو بنویسید حالتی که توی نوت بوک
38
+
39
+ یه سری امکانات جدید هم میاره مثلاً می‌تونید زوم بکنید یا در واقع جابجا بشه روی چیز این یه مجیک کامند بنویسید غیر فعالش بکنید باز میتونید در واقع مثل مطلب در واقع رنگ نمودار و نمیدونم در واقع عرض خط ها همه رو تعیین بکنید مارکت میتونید بزارید براش مثل همونه سابلات رو هم داریم باز دوباره
40
+
41
+ مطلب هستش مثلاً می‌بینید که اینجا یه در واقع دوتایی تعریف کردم اینم مثل مطلب و انواع اقسام دیگه پلات رو هم داریم که می‌تونیم در واقع داکیومتیشن خودش رو ببینید حالا من به کلاس میتونم اشاره کلاس چی هست در واقع هر چیزی که بیشتر چیزهایی که میبینیم آبجکت هستند یعنی چی در واقع اینا با یه سری کلاس ساخته میشن کلاس در واقع کانستراکتور یا بلوپرینتی هست برای ساخت آبجکت حالا چی هست در واقع مشابه با تعریف تابع ما یه سری کلاس داریم تعریفشون بکنیم داخلش یک سری تابع یا متد داره یه سری متغیر یا پراپرتی که چه اتفاقی میفته وقتی من کلاس رو تعریف می‌کنم با یه سری توابع و غیر
42
+
43
+ اسمی اس جی آبجکت جی ساخته بشه و هر آنچه که درباره هر متغیر یا فانککشنی که توی کلاس هست تو کلاس مثلاً در اینجا هستش برای آبجکت جی هم قابل استفاده هستش یه نکته و همونطور که دیدید وقتی من تایپ هر کدوم از این در واقع دیتا تایپ ها را در واقع پرینت میکردم کلاس و همه اینا خودشون یه کلاس بودن و تقریبا هر چیزی که توی پایتون میبینیم از همین قاعده تبعیت میکنه اینجا در واقع یک کلاس گریتر در واقع یک کلاس ساده تعریف کردیم که یه سری تابع داره داخل تابع تعریف کردیم که در واقع زمانی که لودش در فال باشه همون شکلی
44
+
45
+ وقتی تورو باشه میاد با در واقع آپر کیس پرینتش می‌کنه یه تابعی که هستش تو همه کلاس‌ها تابع اینیت هستش و در واقع ورودیش یه سلف هست با یه سری متغیر در واقع موقع فراخوانی ازش استفاده نمی‌کنه فقط برای این هستش که در واقع به متغیرهایی که داخل تابع هستند دسترسی داشته باشیم و اینکه هر آن چیزی که داخل تابع اینت هستش به محض اینکه آبجکت تعریف میشه بلافاصله اجرا میشه یعنی هرچی متغیر داره متغیرها نام گذاری میشن و تابع داره اجرا بشه دستور پرینت هم داشته باشم به محض اینکه آبجکت رو تعریف بکنم پرینتش میکنه این تفاوتی هستش که تابعیت داره با بقیه توابع بلافاصله اجرا میشه بعد از اینکه من آبجکت رو تعریف میکنم بدون اینکه فراخوانی بکنم الان مثلا اینجا میبینید که من در واقع تابع گریت رو فراخوانی کردم و خب اجرا میشه ولی
46
+
47
+ در واقع تابع اینت خودش بلافاصله بعد از اینکه آبجکت رو تعریف کردم اجرا میشه و خب شکل تعریف متغیرها را میبینید چیکار میکنه نی�� رو قرار میده با اون ورودی که گرفته به اسم وقتی فراخوانیشم می‌کنم فقط یه ورودی بهش میدم فقط من کاری ندارم این یکی که خیلی کاربرد داره بحث در واقع ارثبری رو هم داریم توی کلاس ها که یک کلاس از یک کلاس میبره توابع یا پراپرتی به چه شکل در واقع من یک کلاس پرسن فرض کنید تعریف کردم در واقع اسم و فامیلی رو میگیره یه کلاس استودنت تعریف کردم با در واقع با متد سوپر دات اینت چیکار میکنم وقتی از این استفاده میکنم داخل تابع اینت این میاد تمامی در پراپرتی و متدهای کلاس مرجع رو به ارث میبره و برای این هم تعریف میشن به علاوه در واقع توابعی که داخل
48
+
49
+ و همونطور که میبینید من مستقیم از کلاس استفاده می‌کنم در واقع ورودی‌هاش هم ورودی‌های کلاس قبلیه و هم ورودی‌های جدیدی که میگیره و خروجی رو چاپ می‌کنه سوالی اگه از این دارید
50
+
data/Python_Tutorial_Level_0.ipynb ADDED
@@ -0,0 +1,1020 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "7a095b1d",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Python Tutorial (Beginners)"
9
+ ]
10
+ },
11
+ {
12
+ "cell_type": "markdown",
13
+ "id": "929f009f",
14
+ "metadata": {},
15
+ "source": [
16
+ "In this tutorial some basic concepts like variables, loops, conditional statements, and functions will be discussed. we will start with variables:"
17
+ ]
18
+ },
19
+ {
20
+ "cell_type": "markdown",
21
+ "id": "2da4d02a",
22
+ "metadata": {},
23
+ "source": [
24
+ "## Variables"
25
+ ]
26
+ },
27
+ {
28
+ "cell_type": "markdown",
29
+ "id": "3fd5c8a3",
30
+ "metadata": {},
31
+ "source": [
32
+ "In python, we have 4 kinds of variables: numerical variables, strings, boolean, and complex numbers variables."
33
+ ]
34
+ },
35
+ {
36
+ "cell_type": "code",
37
+ "execution_count": 4,
38
+ "id": "a122a867",
39
+ "metadata": {},
40
+ "outputs": [
41
+ {
42
+ "name": "stdout",
43
+ "output_type": "stream",
44
+ "text": [
45
+ "24 <class 'int'>\n",
46
+ "Ali <class 'str'>\n",
47
+ "True <class 'bool'>\n"
48
+ ]
49
+ }
50
+ ],
51
+ "source": [
52
+ "age = 24\n",
53
+ "name = \"Ali\"\n",
54
+ "is_student = True\n",
55
+ "\n",
56
+ "print(age,type(age))\n",
57
+ "print(name,type(name))\n",
58
+ "print(is_student,type(is_student))"
59
+ ]
60
+ },
61
+ {
62
+ "cell_type": "markdown",
63
+ "id": "5a958bac",
64
+ "metadata": {},
65
+ "source": [
66
+ "We can cast the variable types to each others, meaning that converting the type of the variables using functions below."
67
+ ]
68
+ },
69
+ {
70
+ "cell_type": "code",
71
+ "execution_count": 9,
72
+ "id": "3dc9be28",
73
+ "metadata": {},
74
+ "outputs": [],
75
+ "source": [
76
+ "#Casting\n",
77
+ "x = str(3) # x will be '3'\n",
78
+ "y = int(3) # y will be 3\n",
79
+ "z = float(3) # z will be 3.0\n",
80
+ "n = bool(3) # n will be True"
81
+ ]
82
+ },
83
+ {
84
+ "cell_type": "markdown",
85
+ "id": "6acf69aa",
86
+ "metadata": {},
87
+ "source": [
88
+ "## Input data"
89
+ ]
90
+ },
91
+ {
92
+ "cell_type": "markdown",
93
+ "id": "fc2f5cc3",
94
+ "metadata": {},
95
+ "source": [
96
+ "by just one line of code, you can get the input data from the keyboard. Just remember that the type of this data will be string..."
97
+ ]
98
+ },
99
+ {
100
+ "cell_type": "code",
101
+ "execution_count": 81,
102
+ "id": "f4f0441e",
103
+ "metadata": {},
104
+ "outputs": [
105
+ {
106
+ "name": "stdout",
107
+ "output_type": "stream",
108
+ "text": [
109
+ "what's your name? Ali\n",
110
+ "Your name is Ali\n"
111
+ ]
112
+ }
113
+ ],
114
+ "source": [
115
+ "name=input(\"what's your name? \")\n",
116
+ "print(\"Your name is \"+name)"
117
+ ]
118
+ },
119
+ {
120
+ "cell_type": "markdown",
121
+ "id": "bf245272",
122
+ "metadata": {},
123
+ "source": [
124
+ "## Strings"
125
+ ]
126
+ },
127
+ {
128
+ "cell_type": "markdown",
129
+ "id": "7caee28a",
130
+ "metadata": {},
131
+ "source": [
132
+ "Strings in python are surrounded by either single quotation marks, or double quotation marks.\n",
133
+ "\n",
134
+ "'hello' is the same as \"hello\"."
135
+ ]
136
+ },
137
+ {
138
+ "cell_type": "code",
139
+ "execution_count": 17,
140
+ "id": "157b0f7d",
141
+ "metadata": {},
142
+ "outputs": [
143
+ {
144
+ "name": "stdout",
145
+ "output_type": "stream",
146
+ "text": [
147
+ "2\n",
148
+ "TODAY IS A GREAT DAY!\n",
149
+ "3\n",
150
+ "Today is a greaaaaaaaaat day!\n",
151
+ "True\n"
152
+ ]
153
+ }
154
+ ],
155
+ "source": [
156
+ "context='Today is a great day!'\n",
157
+ "print(context.count('d'))\n",
158
+ "print(context.upper())\n",
159
+ "print(context.find('a'))\n",
160
+ "print(context.replace('great','greaaaaaaaaat'))\n",
161
+ "print('great' in context)"
162
+ ]
163
+ },
164
+ {
165
+ "cell_type": "markdown",
166
+ "id": "9773b46f",
167
+ "metadata": {},
168
+ "source": [
169
+ "## Math operators"
170
+ ]
171
+ },
172
+ {
173
+ "cell_type": "markdown",
174
+ "id": "952d3451",
175
+ "metadata": {},
176
+ "source": [
177
+ "Arithmetic or math operators are used with numeric values to perform common mathematical operations:"
178
+ ]
179
+ },
180
+ {
181
+ "cell_type": "code",
182
+ "execution_count": 18,
183
+ "id": "40b2ddef",
184
+ "metadata": {},
185
+ "outputs": [
186
+ {
187
+ "name": "stdout",
188
+ "output_type": "stream",
189
+ "text": [
190
+ "1.6666666666666667\n",
191
+ "1\n",
192
+ "4\n",
193
+ "8\n"
194
+ ]
195
+ }
196
+ ],
197
+ "source": [
198
+ "#we have +, -, /, *, //, %, **\n",
199
+ "\n",
200
+ "print(10/6) # Division\n",
201
+ "print(10//6) # Floor division\n",
202
+ "print(10%6) # Modulus\n",
203
+ "print(2**3) # Exponentiation"
204
+ ]
205
+ },
206
+ {
207
+ "cell_type": "markdown",
208
+ "id": "fceb3dc6",
209
+ "metadata": {},
210
+ "source": [
211
+ "## Comparison operators"
212
+ ]
213
+ },
214
+ {
215
+ "cell_type": "markdown",
216
+ "id": "1df26526",
217
+ "metadata": {},
218
+ "source": [
219
+ "Comparison operators are used to compare two values. The output is a boolean variable.\n"
220
+ ]
221
+ },
222
+ {
223
+ "cell_type": "code",
224
+ "execution_count": 20,
225
+ "id": "48551023",
226
+ "metadata": {},
227
+ "outputs": [
228
+ {
229
+ "name": "stdout",
230
+ "output_type": "stream",
231
+ "text": [
232
+ "False\n"
233
+ ]
234
+ }
235
+ ],
236
+ "source": [
237
+ "# <, >, ==, !=, >=, <=\n",
238
+ "\n",
239
+ "print(1>100)"
240
+ ]
241
+ },
242
+ {
243
+ "cell_type": "markdown",
244
+ "id": "ee87b217",
245
+ "metadata": {},
246
+ "source": [
247
+ "## Logical operators"
248
+ ]
249
+ },
250
+ {
251
+ "cell_type": "markdown",
252
+ "id": "6a82c266",
253
+ "metadata": {},
254
+ "source": [
255
+ "Logical operators are used to combine conditional statements:"
256
+ ]
257
+ },
258
+ {
259
+ "cell_type": "code",
260
+ "execution_count": 21,
261
+ "id": "c34d2249",
262
+ "metadata": {},
263
+ "outputs": [
264
+ {
265
+ "name": "stdout",
266
+ "output_type": "stream",
267
+ "text": [
268
+ "False\n"
269
+ ]
270
+ }
271
+ ],
272
+ "source": [
273
+ "# and: Returns True if both statements are true\n",
274
+ "# or: Returns True if one of the statements is true\n",
275
+ "# not: Reverse the result, returns False if the result is true\n",
276
+ "\n",
277
+ "print(1>0 and 1>2)"
278
+ ]
279
+ },
280
+ {
281
+ "cell_type": "markdown",
282
+ "id": "21ba4836",
283
+ "metadata": {},
284
+ "source": [
285
+ "## Conditional statement"
286
+ ]
287
+ },
288
+ {
289
+ "cell_type": "markdown",
290
+ "id": "362ae8c6",
291
+ "metadata": {},
292
+ "source": [
293
+ "Python relies on indentation (whitespace at the beginning of a line) to define scope in the code. Other programming languages often use curly-brackets for this purpose."
294
+ ]
295
+ },
296
+ {
297
+ "cell_type": "code",
298
+ "execution_count": 84,
299
+ "id": "651af70e",
300
+ "metadata": {},
301
+ "outputs": [
302
+ {
303
+ "name": "stdout",
304
+ "output_type": "stream",
305
+ "text": [
306
+ "enter your score: 20\n",
307
+ "Your scaled score is: 4\n"
308
+ ]
309
+ }
310
+ ],
311
+ "source": [
312
+ "# Writing lines of code that convert your score to american scale\n",
313
+ "score=input('enter your score: ')\n",
314
+ "score=float(score)\n",
315
+ "\n",
316
+ "if score >= 16:\n",
317
+ " scaled=4\n",
318
+ "elif score <= 15 and score >= 14:\n",
319
+ " scaled=3\n",
320
+ "elif score <= 13 and score >= 12:\n",
321
+ " scaled=2\n",
322
+ "elif score <= 11 and score >= 10:\n",
323
+ " scaled=1\n",
324
+ "else:\n",
325
+ " scaled=0\n",
326
+ "\n",
327
+ "# Using format string to include variables in the string. \n",
328
+ "print(\"Your scaled score is: {}\".format(scaled))\n",
329
+ "#print(f\"Your scaled score is: {scaled}\")"
330
+ ]
331
+ },
332
+ {
333
+ "cell_type": "markdown",
334
+ "id": "ace97b5a",
335
+ "metadata": {},
336
+ "source": [
337
+ "The format() method formats the specified value(s) and insert them inside the string's placeholder.\n",
338
+ "The placeholder is defined using curly brackets: {}"
339
+ ]
340
+ },
341
+ {
342
+ "cell_type": "markdown",
343
+ "id": "d92becba",
344
+ "metadata": {},
345
+ "source": [
346
+ "## while loop"
347
+ ]
348
+ },
349
+ {
350
+ "cell_type": "markdown",
351
+ "id": "bbd37206",
352
+ "metadata": {},
353
+ "source": [
354
+ "Python has two primitive loop commands:\n",
355
+ "\n",
356
+ "--> while loops\n",
357
+ "\n",
358
+ "--> for loops\n",
359
+ "\n",
360
+ "With the while loop we can execute a set of statements as long as a condition is true. The while loop requires relevant variables to be ready, in this example we need to define an indexing variable, i, which we set to 1.\n",
361
+ "\n",
362
+ "\n",
363
+ "\n",
364
+ "\n"
365
+ ]
366
+ },
367
+ {
368
+ "cell_type": "code",
369
+ "execution_count": 85,
370
+ "id": "eb99d022",
371
+ "metadata": {},
372
+ "outputs": [
373
+ {
374
+ "name": "stdout",
375
+ "output_type": "stream",
376
+ "text": [
377
+ "1\n",
378
+ "2\n",
379
+ "3\n",
380
+ "4\n",
381
+ "5\n",
382
+ "i is no longer less than 6\n"
383
+ ]
384
+ }
385
+ ],
386
+ "source": [
387
+ "i = 1\n",
388
+ "while i < 6:\n",
389
+ " print(i)\n",
390
+ " i += 1\n",
391
+ "else:\n",
392
+ " print(\"i is no longer less than 6\")"
393
+ ]
394
+ },
395
+ {
396
+ "cell_type": "markdown",
397
+ "id": "d47e1d64",
398
+ "metadata": {},
399
+ "source": [
400
+ "Note: With the \"break\" statement we can stop the loop even if the while condition is true.\n",
401
+ "\n",
402
+ "Note: With the \"continue\" statement we can stop the current iteration, and continue with the next.\n",
403
+ "\n",
404
+ "\n"
405
+ ]
406
+ },
407
+ {
408
+ "cell_type": "code",
409
+ "execution_count": 2,
410
+ "id": "e9e87ff6",
411
+ "metadata": {},
412
+ "outputs": [
413
+ {
414
+ "name": "stdout",
415
+ "output_type": "stream",
416
+ "text": [
417
+ "1\n",
418
+ "Can I stop now??!no\n",
419
+ "2\n",
420
+ "Can I stop now??!yeS\n"
421
+ ]
422
+ }
423
+ ],
424
+ "source": [
425
+ "i = 1\n",
426
+ "while i < 100:\n",
427
+ " print(i)\n",
428
+ " i += 1\n",
429
+ " input_=input('Can I stop now??!')\n",
430
+ " input_=input_.lower()\n",
431
+ " if input_=='yes':\n",
432
+ " break"
433
+ ]
434
+ },
435
+ {
436
+ "cell_type": "markdown",
437
+ "id": "960ea4eb",
438
+ "metadata": {},
439
+ "source": [
440
+ "## for loop"
441
+ ]
442
+ },
443
+ {
444
+ "cell_type": "markdown",
445
+ "id": "d90ddfa2",
446
+ "metadata": {},
447
+ "source": [
448
+ "A for loop is used for iterating over a sequence (that is either a list, a tuple, a dictionary, a set, or a string).\n",
449
+ "\n",
450
+ "This is less like the for keyword in other programming languages, and works more like an iterator method as found in other object-orientated programming languages.\n",
451
+ "\n",
452
+ "With the for loop we can execute a set of statements, once for each item in a list, tuple, set etc.\n",
453
+ "\n",
454
+ "Note: \"break\" and \"continue\" works here as before."
455
+ ]
456
+ },
457
+ {
458
+ "cell_type": "code",
459
+ "execution_count": 86,
460
+ "id": "cc042b24",
461
+ "metadata": {},
462
+ "outputs": [
463
+ {
464
+ "name": "stdout",
465
+ "output_type": "stream",
466
+ "text": [
467
+ "apple\n",
468
+ "0\n",
469
+ "banana\n",
470
+ "1\n",
471
+ "cherry\n",
472
+ "2\n"
473
+ ]
474
+ }
475
+ ],
476
+ "source": [
477
+ "fruits = [\"apple\", \"banana\", \"cherry\"]\n",
478
+ "for i, x in enumerate(fruits):\n",
479
+ " print(x)\n",
480
+ " print(i)"
481
+ ]
482
+ },
483
+ {
484
+ "cell_type": "markdown",
485
+ "id": "38d6ca50",
486
+ "metadata": {},
487
+ "source": [
488
+ "To loop through a set of code a specified number of times, we can use the range() function,\n",
489
+ "The range() function returns a sequence of numbers, starting from 0 by default, and increments by 1 (by default), and ends at a specified number."
490
+ ]
491
+ },
492
+ {
493
+ "cell_type": "code",
494
+ "execution_count": 52,
495
+ "id": "3cc097ba",
496
+ "metadata": {},
497
+ "outputs": [
498
+ {
499
+ "name": "stdout",
500
+ "output_type": "stream",
501
+ "text": [
502
+ "1\n",
503
+ "2\n",
504
+ "3\n",
505
+ "4\n",
506
+ "5\n",
507
+ "Finally finished!\n"
508
+ ]
509
+ }
510
+ ],
511
+ "source": [
512
+ "for x in range(100):\n",
513
+ " print(x)\n",
514
+ "else:\n",
515
+ " print(\"Finally finished!\")"
516
+ ]
517
+ },
518
+ {
519
+ "cell_type": "markdown",
520
+ "id": "b6144cba",
521
+ "metadata": {},
522
+ "source": [
523
+ "The range() function defaults to increment the sequence by 1, however it is possible to specify the increment value by adding a third parameter: range(2, 30, 3)"
524
+ ]
525
+ },
526
+ {
527
+ "cell_type": "markdown",
528
+ "id": "8b4b5e70",
529
+ "metadata": {},
530
+ "source": [
531
+ "## Lists"
532
+ ]
533
+ },
534
+ {
535
+ "cell_type": "markdown",
536
+ "id": "8f0dff88",
537
+ "metadata": {},
538
+ "source": [
539
+ "Lists are used to store multiple items in a single variable. Lists are one of 4 built-in data types in Python used to store collections of data, the other 3 are Tuple, Set, and Dictionary, all with different qualities and usage. We can shortly summerize their properties below:\n",
540
+ "\n",
541
+ "List is a collection which is ordered and changeable. Allows duplicate members.\n",
542
+ "\n",
543
+ "Tuple is a collection which is ordered and unchangeable. Allows duplicate members.\n",
544
+ "\n",
545
+ "Set is a collection which is unordered, unchangeable*, and unindexed. No duplicate members.\n",
546
+ "\n",
547
+ "Dictionary is a collection which is ordered** and changeable. No duplicate members."
548
+ ]
549
+ },
550
+ {
551
+ "cell_type": "code",
552
+ "execution_count": 44,
553
+ "id": "9428f711",
554
+ "metadata": {},
555
+ "outputs": [
556
+ {
557
+ "name": "stdout",
558
+ "output_type": "stream",
559
+ "text": [
560
+ "5\n",
561
+ "['apple', 'banana', 'cherry', 5, True]\n",
562
+ "['apple', 'banana']\n",
563
+ "['apple', 'Ali', 'banana', 'cherry', 5, True, 6]\n",
564
+ "['Ali', 'banana', 'cherry', 5, True, 6]\n",
565
+ "True\n"
566
+ ]
567
+ }
568
+ ],
569
+ "source": [
570
+ "thislist = [\"apple\", \"banana\", \"cherry\", 5 , True]\n",
571
+ "print(len(thislist)) # returns the length of the list\n",
572
+ "print(thislist)\n",
573
+ "print(thislist[0:2]) # returns the defined elements of the list\n",
574
+ "\n",
575
+ "# Methods\n",
576
+ "thislist.append('6') # insert the new element at the end of the list\n",
577
+ "thislist.insert(1,'Ali') # insert the element at the desired index (here 1)\n",
578
+ "print(thislist)\n",
579
+ "thislist.pop(0) # deletes the defined element of the list\n",
580
+ "print(thislist)\n",
581
+ "\n",
582
+ "print(5 in thislist)"
583
+ ]
584
+ },
585
+ {
586
+ "cell_type": "markdown",
587
+ "id": "37bdbece",
588
+ "metadata": {},
589
+ "source": [
590
+ "#### IMPORTANT Note: keep in mind that in python, the indices start from 0 (unlike MATLAB that start from 1)"
591
+ ]
592
+ },
593
+ {
594
+ "cell_type": "markdown",
595
+ "id": "8772402b",
596
+ "metadata": {},
597
+ "source": [
598
+ "## tuples"
599
+ ]
600
+ },
601
+ {
602
+ "cell_type": "markdown",
603
+ "id": "5c65ebc4",
604
+ "metadata": {},
605
+ "source": [
606
+ "Tuples are used to store multiple items in a single variable.\n",
607
+ "\n",
608
+ "A tuple is a collection which is ordered and unchangeable.\n",
609
+ "\n",
610
+ "Tuples are written with round brackets."
611
+ ]
612
+ },
613
+ {
614
+ "cell_type": "code",
615
+ "execution_count": 11,
616
+ "id": "8e9f366b",
617
+ "metadata": {},
618
+ "outputs": [
619
+ {
620
+ "name": "stdout",
621
+ "output_type": "stream",
622
+ "text": [
623
+ "3\n",
624
+ "('abc', 34, True, 40, 'NOT')\n"
625
+ ]
626
+ }
627
+ ],
628
+ "source": [
629
+ "thistuple = (\"apple\", \"banana\", \"cherry\")\n",
630
+ "print(len(thistuple))\n",
631
+ "tuple1 = (\"abc\", 34, True, 40, \"NOT\")\n",
632
+ "print(tuple1)"
633
+ ]
634
+ },
635
+ {
636
+ "cell_type": "markdown",
637
+ "id": "f6a41e81",
638
+ "metadata": {},
639
+ "source": [
640
+ "## Sets"
641
+ ]
642
+ },
643
+ {
644
+ "cell_type": "markdown",
645
+ "id": "7dbbba2b",
646
+ "metadata": {},
647
+ "source": [
648
+ "A set is a collection which is unordered, unchangeable*, and unindexed.\n",
649
+ "\n",
650
+ "* Note: Set items are unchangeable, but you can remove items and add new items.\n"
651
+ ]
652
+ },
653
+ {
654
+ "cell_type": "code",
655
+ "execution_count": 23,
656
+ "id": "269d7988",
657
+ "metadata": {},
658
+ "outputs": [
659
+ {
660
+ "name": "stdout",
661
+ "output_type": "stream",
662
+ "text": [
663
+ "{True, 2, 'cherry', 'apple', 'banana'}\n"
664
+ ]
665
+ }
666
+ ],
667
+ "source": [
668
+ "new_set = {\"apple\", \"banana\", \"cherry\", True, 1, 2, 2}\n",
669
+ "print(new_set)"
670
+ ]
671
+ },
672
+ {
673
+ "cell_type": "code",
674
+ "execution_count": 24,
675
+ "id": "e90b39d3",
676
+ "metadata": {},
677
+ "outputs": [
678
+ {
679
+ "name": "stdout",
680
+ "output_type": "stream",
681
+ "text": [
682
+ "{True, 2, 'cherry', 'banana'}\n"
683
+ ]
684
+ }
685
+ ],
686
+ "source": [
687
+ "new_set.remove('apple') # we cannot remove by index, because index has no meaning in sets!!\n",
688
+ "print(new_set)"
689
+ ]
690
+ },
691
+ {
692
+ "cell_type": "code",
693
+ "execution_count": 25,
694
+ "id": "f939ce8c",
695
+ "metadata": {},
696
+ "outputs": [
697
+ {
698
+ "name": "stdout",
699
+ "output_type": "stream",
700
+ "text": [
701
+ "{True, 2, 'cherry', 'Hi', 'banana'}\n"
702
+ ]
703
+ }
704
+ ],
705
+ "source": [
706
+ "new_set.add('Hi') # we cannot remove by index, because index has no meaning in sets!!\n",
707
+ "print(new_set)"
708
+ ]
709
+ },
710
+ {
711
+ "cell_type": "code",
712
+ "execution_count": 68,
713
+ "id": "049b3aa4",
714
+ "metadata": {},
715
+ "outputs": [
716
+ {
717
+ "name": "stdout",
718
+ "output_type": "stream",
719
+ "text": [
720
+ "['Hi', 'cherry']\n",
721
+ "*******\n",
722
+ "True\n",
723
+ "*******\n",
724
+ "True\n",
725
+ "2\n",
726
+ "cherry\n",
727
+ "Hi\n",
728
+ "banana\n"
729
+ ]
730
+ },
731
+ {
732
+ "name": "stderr",
733
+ "output_type": "stream",
734
+ "text": [
735
+ "C:\\Users\\aligh\\AppData\\Local\\Temp/ipykernel_11788/3704487697.py:3: DeprecationWarning: Sampling from a set deprecated\n",
736
+ "since Python 3.9 and will be removed in a subsequent version.\n",
737
+ " print(random.sample(new_set, 2))\n"
738
+ ]
739
+ }
740
+ ],
741
+ "source": [
742
+ "# sample from the set:\n",
743
+ "import random\n",
744
+ "print(random.sample(new_set, 2))\n",
745
+ "\n",
746
+ "print('*******')\n",
747
+ "# another way: by converting set to list\n",
748
+ "print(list(new_set)[0])\n",
749
+ "\n",
750
+ "print('*******')\n",
751
+ "# another way: by iterating over a loop\n",
752
+ "for i in new_set:\n",
753
+ " print(i)"
754
+ ]
755
+ },
756
+ {
757
+ "cell_type": "markdown",
758
+ "id": "286a5c81",
759
+ "metadata": {},
760
+ "source": [
761
+ "## Dictionary"
762
+ ]
763
+ },
764
+ {
765
+ "cell_type": "markdown",
766
+ "id": "c51ed29b",
767
+ "metadata": {},
768
+ "source": [
769
+ "Dictionaries are written with curly brackets, and have keys and values. Dictionary items are presented in key:value pairs, and can be referred to by using the key name. in this example, the keys are 'brand', 'model', and 'year. we cannot have several same keys (like year here), and the dictionary will only keep one of them."
770
+ ]
771
+ },
772
+ {
773
+ "cell_type": "code",
774
+ "execution_count": 70,
775
+ "id": "364bc79f",
776
+ "metadata": {},
777
+ "outputs": [
778
+ {
779
+ "name": "stdout",
780
+ "output_type": "stream",
781
+ "text": [
782
+ "{'brand': [], 'model': 'Mustang', 'year': 2020}\n"
783
+ ]
784
+ }
785
+ ],
786
+ "source": [
787
+ "thisdict = {\n",
788
+ " \"brand\": [],\n",
789
+ " \"model\": \"Mustang\",\n",
790
+ " \"year\": 1964,\n",
791
+ " \"year\": 2020\n",
792
+ "}\n",
793
+ "print(thisdict)"
794
+ ]
795
+ },
796
+ {
797
+ "cell_type": "code",
798
+ "execution_count": 71,
799
+ "id": "72014022",
800
+ "metadata": {},
801
+ "outputs": [
802
+ {
803
+ "name": "stdout",
804
+ "output_type": "stream",
805
+ "text": [
806
+ "{'brand': ['Ford'], 'model': 'Mustang', 'year': 2020}\n"
807
+ ]
808
+ }
809
+ ],
810
+ "source": [
811
+ "# adding an element to the 'brand' key\n",
812
+ "thisdict['brand'].append('Ford')\n",
813
+ "print(thisdict)"
814
+ ]
815
+ },
816
+ {
817
+ "cell_type": "code",
818
+ "execution_count": 72,
819
+ "id": "bf091f0c",
820
+ "metadata": {},
821
+ "outputs": [
822
+ {
823
+ "data": {
824
+ "text/plain": [
825
+ "dict_keys(['brand', 'model', 'year'])"
826
+ ]
827
+ },
828
+ "execution_count": 72,
829
+ "metadata": {},
830
+ "output_type": "execute_result"
831
+ }
832
+ ],
833
+ "source": [
834
+ "# keys of the dictionary\n",
835
+ "thisdict.keys()"
836
+ ]
837
+ },
838
+ {
839
+ "cell_type": "markdown",
840
+ "id": "7786ced7",
841
+ "metadata": {},
842
+ "source": [
843
+ "## Functions"
844
+ ]
845
+ },
846
+ {
847
+ "cell_type": "markdown",
848
+ "id": "6a9e1e91",
849
+ "metadata": {},
850
+ "source": [
851
+ "A function is a block of code which only runs when it is called.\n",
852
+ "You can pass data, known as parameters, into a function.\n",
853
+ "A function can return data as a result.\n",
854
+ "\n",
855
+ "In Python a function is defined using the def keyword:\n",
856
+ "\n"
857
+ ]
858
+ },
859
+ {
860
+ "cell_type": "code",
861
+ "execution_count": 73,
862
+ "id": "52c2e95f",
863
+ "metadata": {},
864
+ "outputs": [
865
+ {
866
+ "name": "stdout",
867
+ "output_type": "stream",
868
+ "text": [
869
+ "15\n",
870
+ "25\n",
871
+ "45\n"
872
+ ]
873
+ }
874
+ ],
875
+ "source": [
876
+ "def my_function(x):\n",
877
+ " result= 5 * x\n",
878
+ " return result\n",
879
+ "\n",
880
+ "print(my_function(3))\n",
881
+ "print(my_function(5))\n",
882
+ "print(my_function(9))"
883
+ ]
884
+ },
885
+ {
886
+ "cell_type": "markdown",
887
+ "id": "93a11d54",
888
+ "metadata": {},
889
+ "source": [
890
+ "## Plotting"
891
+ ]
892
+ },
893
+ {
894
+ "cell_type": "markdown",
895
+ "id": "307d4912",
896
+ "metadata": {},
897
+ "source": [
898
+ "matplotlib is a strong library for plotting in python. Below is a brief representation of this library, but you can learn more about this on https://matplotlib.org/3.5.3/api/_as_gen/matplotlib.pyplot.html and search for your intended plot."
899
+ ]
900
+ },
901
+ {
902
+ "cell_type": "code",
903
+ "execution_count": 74,
904
+ "id": "49b5121d",
905
+ "metadata": {},
906
+ "outputs": [
907
+ {
908
+ "data": {
909
+ "image/png": "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\n",
910
+ "text/plain": [
911
+ "<Figure size 432x288 with 1 Axes>"
912
+ ]
913
+ },
914
+ "metadata": {
915
+ "needs_background": "light"
916
+ },
917
+ "output_type": "display_data"
918
+ }
919
+ ],
920
+ "source": [
921
+ "import matplotlib.pyplot as plt\n",
922
+ "\n",
923
+ "xpoints = [1, 8]\n",
924
+ "ypoints = [3, 10]\n",
925
+ "\n",
926
+ "plt.plot(xpoints, ypoints)\n",
927
+ "plt.show()"
928
+ ]
929
+ },
930
+ {
931
+ "cell_type": "code",
932
+ "execution_count": 79,
933
+ "id": "659c3924",
934
+ "metadata": {},
935
+ "outputs": [
936
+ {
937
+ "data": {
938
+ "image/png": "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\n",
939
+ "text/plain": [
940
+ "<Figure size 432x288 with 2 Axes>"
941
+ ]
942
+ },
943
+ "metadata": {
944
+ "needs_background": "light"
945
+ },
946
+ "output_type": "display_data"
947
+ }
948
+ ],
949
+ "source": [
950
+ "import matplotlib.pyplot as plt\n",
951
+ "\n",
952
+ "#plot 1:\n",
953
+ "x = [0, 1, 2, 3]\n",
954
+ "y = [3, 8, 1, 10]\n",
955
+ "\n",
956
+ "plt.subplot(1, 2, 1)\n",
957
+ "plt.plot(x,y)\n",
958
+ "\n",
959
+ "#plot 2:\n",
960
+ "x = [0, 1, 2, 3]\n",
961
+ "y = [10, 20, 30, 40]\n",
962
+ "\n",
963
+ "plt.subplot(1, 2, 2)\n",
964
+ "plt.plot(x,y)\n",
965
+ "\n",
966
+ "plt.show()"
967
+ ]
968
+ },
969
+ {
970
+ "cell_type": "code",
971
+ "execution_count": 77,
972
+ "id": "840fadd3",
973
+ "metadata": {},
974
+ "outputs": [
975
+ {
976
+ "data": {
977
+ "image/png": "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\n",
978
+ "text/plain": [
979
+ "<Figure size 432x288 with 1 Axes>"
980
+ ]
981
+ },
982
+ "metadata": {
983
+ "needs_background": "light"
984
+ },
985
+ "output_type": "display_data"
986
+ }
987
+ ],
988
+ "source": [
989
+ "import matplotlib.pyplot as plt\n",
990
+ "\n",
991
+ "x = [\"A\", \"B\", \"C\", \"D\"]\n",
992
+ "y = [3, 8, 1, 10]\n",
993
+ "\n",
994
+ "plt.bar(x,y)\n",
995
+ "plt.show()"
996
+ ]
997
+ }
998
+ ],
999
+ "metadata": {
1000
+ "kernelspec": {
1001
+ "display_name": "Python 3 (ipykernel)",
1002
+ "language": "python",
1003
+ "name": "python3"
1004
+ },
1005
+ "language_info": {
1006
+ "codemirror_mode": {
1007
+ "name": "ipython",
1008
+ "version": 3
1009
+ },
1010
+ "file_extension": ".py",
1011
+ "mimetype": "text/x-python",
1012
+ "name": "python",
1013
+ "nbconvert_exporter": "python",
1014
+ "pygments_lexer": "ipython3",
1015
+ "version": "3.9.7"
1016
+ }
1017
+ },
1018
+ "nbformat": 4,
1019
+ "nbformat_minor": 5
1020
+ }
data/Pytorch_CNN_Tutorial_SCR.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/Pytorch_Session_transcript_part1.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ پایتورچ صحبت کنیم یه ای پی آی شبیه در واقع نامپای اری داره ساختار تنسوری که این امکان را به شما میده که در واقع گرادیان رو عددی محاسبه کنید و الان اون فرایند بی پی یا بک پروگریشن را انجام بدید در واقع قابلیتی داره که تنسور روی جی پی یو قرار بده حالا شاید اگر سیستم شخصی داشته باشید چه از کلب استفاده کنید میتونید خیلی سرعت ترین رو بیشتر کنید با حالا سنسورهای پایتونچ و حالا تنسرفلو که بلدید یا حالا تاریخچه براش نوشتم مراحل نصبش اگه بخواین در واقع سیستم رو نصب کنید به این صورت که میاید توی پایتون و با یک کد فقط یه خط کد شما میتونید نصبش کنید حالا اگر
2
+
3
+ ویندوز لینوکس مک دارید مکش فکر کنم اگه ام تو به بالا داشته باشید میتونید سیلیکون ولی استفاده کنید وگرنه باید از حالت عادیش که چیز نداره وجود نداره براش رو سی پی یو ران میشه در واقع میتونید همین کوتاه ۱۱۸ رو با این دستور نصب کنید بلدید چه جوری اینجور چیزا رو نصب کنید یا اینم بگم آره یه آناکوندا روی سیستم پاورش که بیارید شما میتونید تعریف کنید تورچ دارم واردش میشیم شما هرچی بخواین رو میتونید تو نصب کنید دیگه نیازی نیست هر بار یه چیزی اشتباه شد همه چیزا رو با هم پاک کنید و راحت میتونید پایتون های مختلف داشته باشید حالا وابسته به کارتون پایتون ۳۸ تا
4
+
5
+ ۱۱ یا اصلاً می‌خوایم پایتون ۲ کار کنیم راحت می‌تونید نصب کنید و اون دستور رو می‌زنید نصب میشه دو و خورده‌ای گیگ هم هستش که می‌تونید نصب داشته باشید این از نصبش بعد خب خیلی بخوایم ساده شروع کنیم سایزش خوبه یا درستش کنم این دیگه درشت نیست آره کلاً فقط محدودیت جی پیو داره پنج ساعت و نیم در روز و چند هفته استفاده کنید تا دو ساعت کاهش پیدا میکنه جی پی یو مجبورید چند تا ایمیل مختلف داشته باشید که حالا عوض شده تمرین های ما به اونجا نمیرسه حالا
6
+
7
+ ترانسفورمتون و ال ال ام تون شاید برسه اگه بدن تمرین که مجبور بین ۴ تا مثلاً ایمیل مختلف نتایج هی جابجا کنید چند ای پاک که میره جیپیش تموم میشه ولی خب سیستم‌های خودتون برای اینکه ما در واقع یک سنسور یا همون نامپای اره‌ای که داریم رو تبدیل کنیم به در واقع تنسورهای پایتون راحت از دستور ترش دات تنسور استفاده میکنیم حالا اگر دیتاتون به صورت خام باشه میتونید از این دستور از نام پایه باشه میتونید از فرام نامپای در واقع اونو تبدیلش کنید بزرگترینشه بیاین جلو این همه صندلی نمیبینی دیگه الان ریز نمیشه بزرگه بزار چیکار کنیم
8
+
9
+ پس شما به راحتی می‌تونید حالا اون دیتایی که دارید از نام‌های یا دیتای خام باشه را تبدیل کنید همینطور میتونید با دستور وانز لایک یا رندوم لایک یک ماتریسی به ابعاد ماتریس مورد نظرتون رو تولید کنید که حالا یا همش یک باشه یا رندم باشه و حالا میبینید حالا این کد خیلی جامع ما اگه تیکه هایش میپریم بعدا خودتون میتونید امتحان کنید چون اگه بخواهیم دوتاشو برسیم وقت نداریم در واقع عط های که میتونید از خروجی بگیرید شیپش تایپش و حالا دیوایسه تایپش که حالا میتونه فت ۳۲ ۶۴ اینت هشت و اینا باشه هر حالا وابسته به کارتون و دقت مورد نظرتون تغییر میدید دیوایس چیز مهمی میتونه باشه اینه که
10
+
11
+ خب این سنسوری که شما دارید حالا وزن‌های یک شبکه است روی چه سیستمی داره ران میشه رو سی پی یو جی پی یو اگه رو سی پی یو باشه که سرعت پایینه و اینکه سی پی یوهای خیلی قوی داشته باشید چند هسته‌ای کار کنه اگر رو کوددا باشه که در واقع روی جی پی یوتونه جی پی یو لپتاپتون هم اگر از خانواده ۱۰۰۰ به بعده کودا داره ۱۰ مثلاً ۶۰ ۱۰۸۰ به حالا تا ۴۰۸۰ ۴۰ ۹۰ قبلش کودا وجود نداره براشون ام ایکس مثلا ۹صد و خورده ای ندارد آره جلوتر دستورشو بهتون می‌گ نه نداره فقط دیوایس رو تعریف می‌کنید که اگهویبل این دستور تک خطی که اینجا میبینید اگر کوتاهشویبله دیوایس بکنه کود کودا و توی نصبش هم حتما
12
+
13
+ دیر اومدید نصبشو اینجا شما دو نسخه کودا دارید یه نسخه سی پی یو از اینجا می‌تونید کجا بودیم عملیاتی هم که حالا میتونید روش انجام بدید به راحتی همون جبری و ساده اولیه است میتونید ضربه تنسوری داشته باشید با علامت اتساین این کار میکنه اگر علامت ضرب بزار این کار رو میکنه و حالا مول و متن مود هم که در واقع همینه و اینطوری تعریف میشن دیگه از ایناش میگذریم خب الان شما یه سنسور تک بعدی دارید و در واقع یک سنسور مثلاً n در n داشتید مجمو
14
+
15
+ رو حساب کردید با دات سام به شما خروجی که میده یه چنین فرمی داره تنسوری هست از کلاس تنسور و ولیو نداره ولیوش ۱۲ شما ولی خروجیش رو می‌خواین با دات آیتم میتونید خروجی بگیرید حالا اگه دیکشنری باشه دات ولیو با تنسور باشه با دات سایت که حالا میشه این خروجی سیستمتون اگر مدلتون مثلاً سافت مکس داشته باشه روش داشته باشه راحت میتونید با کلاس مورد نظرش رو بخونید یه بخش مهم دیگه که تو پایتون هست دیتا ست و دیتا لودر هاشن خب همونطور که میدونید یه دیتا ست های آماده ای هست برای حالا ویژه و کارهای مثلا تکست و اینجور چیزا و آماده است مثل ام نیست فشن ام نیست سی و اینجور حرفا و به شما راحتی میده که میتونید دانلود کنید این کار به سرعت
16
+
17
+ کلاه و نمی‌خواد حتماً کل اون دیتا ست رو آماده توی خود در واقع کامپیوتر خودتون داشته باشید تو درایوتون حالا با این دو تا دستور شما اون دیتا سه تا رو میارید و حالا مثلاً من ام نیست رو می‌خوام با یه دستور راحت خود پایتورچم تمامی اینا رو داره یعنی این کدها رو من دقیقا از سایت خود پای ترش برداشتم که شما بتونید مراجعه کنید بهش روتش که حالا دیتاتونه اگر دیتایی دارید که تو پی سی خودتونه روت خودتون رو میدید که آدرس دیتا رو پیدا کنه اگه ترین تورو باشه حالا فال باشه دسترسی ها رو تفاوت میده خب حالا ام نیست هم فایل تست داره هم ترند داره لوکیشن ها رو برمیداره و یه ترانسفورم حالا در مورد ترانسفورم هم صحبت میکنیم ما فقط الان میخویم تو تنسور استفاده کنیم یعنی دیتایی که میاد تنسور باشه نامپ نباشه و حالا عکس یه ارای ساده نباشه حتما میخویم تبدیل به تنسور بشه
18
+
19
+ و بین صفر تا یک خود توتنسور این چیزا رو هندل می‌کنه دانلود نمی‌کنه مثلاً الان من زدم میتونید ببینید توی کامپیوتر من تو کش در واقع ترکم یه تیکه شو دانلود کرده شما میتونید دانلود نکنید بعد شما میتونید با فراخوندن در واقع اون‌ها دیتا ست بیاین حالا یه سمپلی ازش ببینید مثلا ام آورده بودم بزار من بزنم تا اینجا ران شه شما مثلا اول خود ایمیج میخونه بعد لیبلش رو میخونه بر اساس ساختار دیتا ست که داره و شما حالا میتونید هی هر بار که این چیز ران کنید میتونید نمونه های دیتا ست اولیه را ببینید و این از یه قسمت مهم دیگه که هست اینه که اوکی شما نمیخواین از دیتا ست که آماده است استفاده کنید
20
+
21
+ مجبوری دیتا ست خودتون رو داشته باشید که حالا تو تمرین از این بخش خیلی استفاده شده و شما باید یک دیتا لودری بنویسید که بتونید در واقع دیتاهای خودتون رو و لیبل‌هاشو بخونید این کار در واقع میتونید با کاستوم دیتا ستی که خود پای توچ نوشته اعمال کنید یه خانواده در واقع از خود دیتا ست تولید میکنه از کلاس دیتا ست اصلی که میتونید شما ازش استفاده کنید سه بخش مهم حالا اینیشیال و آیتم داره که در واقع دو تا آندرلاین بغل هر کدوم شروع میشن اینا تعریف شده است و توی خود دیتا ست میدونه هر کدوم چیکار میکنه لن در واقع کل تعدادتون رو در میاره و گت آیتم اینه که هر بار فراخونده میشه یه ایندکس خاصی رو میخونه حالا اگر عکسه میره ایندکس اول مثلا پوشه ایمیج میخونه به اضافه لیبلش و حالا شما میتونید این وسط یه
22
+
23
+ یک عکس دارید و می‌خواین بخونیدش ولی مشکلتون اینه که هر پوشتون یک سایز مختلف دارند یا حتی توی پوشه سایز عکساتون فرق داره شما می‌خواین همه دیتا ست در واقع می‌خونید همه مثلاً عکس‌های ۲۲۴ در ۲۲۴ باشه شما میتونید با تعریف کردن ترانسفورم که اونجا قبلا فقط تو تنسور داشتیم ری سایز و پد انجام بدید که همه عکساتون یک سایز بشه از تغییر نکنه حالا بالای بغلش سیاه میکن بهش میگن پدینگ کردن که در واقع اون عکس فقط شیپش تغییر کنه میتونید لیبلتون رو حالا تغییر بدید مثلا اگر استرینگ هست مثلا کلاس هاتون بر اساس سگ و گربه و ایناست به عدد تبدیلش کنید بین مثلا صفر تا ۱۲ ۱۲ کلاسستون رو بذارید و حالا
24
+
25
+ بخش مهم دیگه‌ای هم که توی تمرین ممکنه ازش استفاده کنید اینه که در واقع آگمنتیشن انجام بدید خب شما مثلاً حالا من همه چی رو عکس توضیح میدم بعد شما یک دیتا ستی دارید ۱۰ هزار تا عکس داره ولی مدلتون مثلا رزنت ۵۰ هست براش کمه این ده هزار تا عکس برای در واقع ترین کردنش از یک طرف هم با مقوله داریم حالا آشنایی داریدزیشن ما میخویم در واقع مدلونزیشنش بره بالا یکی از روش هاش آگمنت کردن در واقع ورودی مسئله است شما میتونید مثلا اگر یک عکس سگ دارید میتونید اینو به روش های مختلف کپ کنید روتیت کنید فیلیپ کنید رنگش عوض کنید که در واقع مدلتون خیلی بایاس نشه روی یک فیچر خاص و در واقع هدف کلا مسئله تو تغییر کنه شما
26
+
27
+ در واقع با فرا خوندن حالا ترانسفورمرهای مختلف یا کلاً به صورت حرفه‌ای استفاده از لایبری آلبوم اتیشن در واقع آگمنتیشن رو انجام بدید خب حالا یه روش در واقع مختلف برای بالا بردن جنریزیشن میتونه کسی بگه به جز آگمنت کردن حالا جلوتر در مورد اپتیمایز که صحبت میکنیم حالا در مورد ال تو وان شنیدید مطمئنا نشنیدید در واقع میاد حساسیت مدل رو کاهش میده در واقع از شدت پیچیدگی محیط مدلتون کم میکنه ترشولدی میزاره بین کلاس ها و ممکنه در واقع دقت ترینتون یک مقدار کم بشه ولی عوضش چنینزیشن خیلی بهتری داریم
28
+
29
+ یه راه دیگه‌ای هم که داریم در واقع نویزی کردن لیبل‌هاست حالا یه سوال تمرینتونم فکر کنم همچین چیزی هست شما میاین دیتا ست رو می‌خونید دیتا ست ۱۰۰% تمیزه و برای شما خوب مناسب ممکنه نباشه برای اون مسئله‌ای که هست شما میاین مثلاً یک درصد از دیتا ست رو لیبلش هرچی هست رو عوض میکنید تو همین دیتا ست توی کاستوملود میکنید یه ای میذاید که اگر تو در واقع مود ترین هستید یه عدد رندوم تولید کنید اگر عدد رندوم کمتر از یک درصد بود لیبل نویزی بده این باعث میشه در واقع جنزیشن مدلتون مقداری افزایش بده دنیاهای ناشناخته آره دیتا اشتباه بهش میدیم باعث میشه دنیای ناشناخته پیدا کنه عواق اینا همه کانوکس های پیچیده ریاضیه
30
+
31
+ خب یک درصد کمتر از یک درصدشه اونقدر تاثیری نداره ولی باعث میشه از مینیموم‌ها حداقل کشیده شه بیرون ما همیشه سعی و تلاشمون اینه که از مینیموما بیایم بیرون بریم به سمت گلوبالا بعد لوکالا در واقع بیایم بیرون لوکال مینیموما رو خارج بشیم حالا میایم لرنینگ ریتمون رو بازی میکنیم اپتیمایزرامون یه قسمتو هندل میکنن یه قسمت هم اینه که دیتا ستمون یک مقدار خیلی ناچیزی نویزی باشه باعث این کامکس های پیچیده ریاضی که داره سعی میکنه گلوبال مینیمم پیدا کنه به نقاطی برسه که تا الان نرسید لیبل زدن که ما داریم لیبل داره اگه دیتا ست لیبل نداشت خب بستگی داره دیتاتون چیه اگه ایمیج باشه خب یه لایبری های هستند برای در واقع لیبل زدن عکس حالا
32
+
33
+ باندریباکس بکشی سیگمنت کنی هرچی خواستی یا فقط پوشه بندی کنی مثلاً سگ دیدی بزنی ۱ مثلاً گربه دیدی بزنی ۲ خودش جدا کن تو هیچ کدوم از تمریناتو نداری چون فراهم کردن دیتا ست وقت خیلی زیادی می‌گیره و این هدف در واقع درس فایده نداره خب حالا که شما دیتا لودری دارید باید این دیتا لودر رو در واقع فرا بخونید و با استفاده از حالا سایزی که میگید و شافلی که براش تعریف میکنید لود میکنید من حالا که تعریف کردم یک کلاسی را برای دیتا ست میخوام کلاس رو فراخونی کنم و در واقع لودش کنیم چی چون هر بار فراش میخونی شما میخوای یهچ بهت بده نه الان هر
34
+
35
+ فرا می‌خونی یک بار اون کد میره ایندکسش سیو می‌شه براش می‌دونه چقدرش رو رفته مثلاً شما ۱۰ هزار تا عکس داری ۱۰۰ تا ۱۰۰ تا همین جا داره میره جلو مگه اینکه وسطش خودت تو دیتا لودرت یه عدد رندوم تولید کنی که هر موقع خواستی یه چیزو بیاره با اینا ترکیب کنه مثلاً ما تو عکسا یه کاری داریم به نام کاتن میکس شما گربه داری بهش میدی ولی یک چهارم عکس سگه کات کردید از یه عکس سگ انداختی توش این باعث میشه مثلا باز اون قدرتیشن بره بالا به فیچر های کلی تری نگاه کنه این باعث میشه شما یه عدد رندوم تولید کردی که اون سگه رو بیاری بیرون دیگه بندازی رو گربه این تو دیتا لودر تو انجام میشه ولی در کل یه کاری میکنه تمام دیتاها رو شما یه بار ببینید و یه گزینه هم داره فکر کنم ریپلیس حالا اگر اشتباه نکنم وقتی دیتاتون خیلی کمه مخصوصا تو کارهای پزشکی ۱۰۰ تا دونه عکس بیشتر نداری ورمیداری آگمنت
36
+
37
+ ترینو یه بار انجام میدی دفعه بعدی خب دیگه دیتا نداری مجبوری هرچی ورداشتی بزاری سر جاش دوباره شافل کنی یه وجه دیگه برداری آگمنت کنی و بزاری اینجور مواقع باید درصد آگمنتیشن ببری بالا که دیتاها دیگه هی شبیه هم نباشه هی تغییر کنه شافل هم که حالا میتونید برای اینکه ۱۰۰% تور کنید ولی برای در واقع تست و ولیدیشن میتونید شافل نکنید بعد که دیگه حالا با ایتریشن و اینا میتونید هیتریشن های مختلف بخونید ببینید در واقع چیکار میکنید دیگه از ایناش میگذریم ترنسفورم هم گفتم یه در واقع قسمتی هستش که تو دیتا ست تعریف میکنید که شما روی حالا ایکس و وایتون حالا ایمیج و لیبلش اعمال کنید مثلا من اینجا اومدم یه دستور نوشتم بیاد وان هات کنه در واقع لیبل هاونو که حالا خروجیش رو ببینید یه چنین چیزیه به
38
+
39
+ به من یک کلاس مثلاً ۷ بده یه وان هات ۷ میده مثلا و این هم در واقع یک مدله که ترانسفورم تارگت در واقع فقط رو لیبل‌ها اعمال می‌شه خب میریم بخش بعدی در واقع ساختن یک شبکه عصبی شما این تیکه کد رو اول هر کدتون بذارید و از این به بعد از دیوایس استفاده کنید به صورت خودکار اگر کوداتون باشه میره رو جی پی یو اگر نباشه رو سی پی یو ران میشه چرا چون خیلی مهمه هم شبکه هم در واقع ایمیج یا دیتاتون روی یک دیوایس باشه شما نمیتونید دیتاهاتون رو سی پی یو باشه مدلتون رو جی پی یو حتما باید روی یک دیوایس باشن که بتونید ران کنید در واقع رانم کنید خروجی این سیستم همیشه مال من حالا هستبل رو میزنه برای تعریف کردن یک شبکه حالا چه چیز باشه ام ال پی باشه چه سی ان ان باشه
40
+
41
+ در واقع بیاین از ماژول در واقع نورال نتورک ماژول استفاده کنید خیلی کار راحت میکنه این هم دوباره یه دونه اینیشیالیزیشن داره که شما میاین اون لایه‌های مد نظرتون رو تعریف می‌کنید که در واقع حالا مثلاً من اینجا اومدم از دو روشش نوشتم براتون شما میتونید یک فلتن تعریف کنید یک سیکوئنشیال همه لایه هاتون سیکونشیال بزارید مثلا میخوید از ۲۸ در ۲۸ یه دونه ورودی توه میخویم ۵۱۲ یه ریلو بخوره دوباره ۵۲ ۵۱۲ همینطور برید و یک تیکهارد این مسیری هستش که قراره فوروارد بره حالا اینجا ما یه هد داریم یه دونه اوت هم داریم ممکنه مولتی هد باشه مدلتون چند تا ورودی مختلف بگیره چند تا مدل رو به هم کان کرد بخواهیم بکنیم تو این فوروارد این انجام میشه تو بخش اینیشیال فقط وزن ها اینشال
42
+
43
+ که حالا اونم روش‌های مختلف وزنا رو می‌دونی چه جوری دیگه یا رندمن یا حالا خاویر و اینجور چیزاست که دقت‌های مختلفی برای کارهای مختلف داره یا سیکونشیال تعریف کنید یا نه شما اسم می‌ذارید با در واقع اسم‌هاشون مدلا رو اینشیال میکنید تو فوروارد فقط فرا میخوید ورودیتون ایکس هست بعد همینطور میره داخل لایه های مختلف و خروجیتون حالا هرچی که هست خارج میشه این از این اگر بخواهیم اون در واقع وزن اولیه رو روش مختلفی مثل حالا رندوم خاویر یا چیز بدید تو همین بخش اینت باید تعریف کنید که چی میخواین داشته باشید بعد که حالا کلاس در واقع مدلتون رو تعریف کردید شما باید اون مدل رو بسازید مدل را فرا میخونم در واقع اون کلاس را فرا میخونم و قرارش میدم رو دیوایس که قرار بده مدلتون رو روی جی پی یو حالا پرینت هم
44
+
45
+ لایه‌ها رو میگه چیز کنید در واقع ساختار شبکه رو هم ببینید پای ترش یه دونه لایبری داره فکر کنم اسمش سامریه نصب کنید دقیقاً مثل تنسو فلو بر اساس ورودی که می‌گیرید تعداد پارامترها وزنش و حالا چیزهای دیگه رو مشخص می‌کنه خب شما می‌خواین حالا مدلی که طراحی ورودی بدید یک ورودی رندوم میسازیم بر اساس ورودی مثلا مون بر روی دیوایس قرارش میدیم و فقط به مدل میدیمش دیگه به فوروارد و کال نمی کنیم کل همون مدلی که اینجا در واقع در نظر گرفتیم و ساختیم رو فرا میخونیم و حالا ورودی رو بهش میدیم شما میتونید روش سافت مکس رو بزارید تو خود مدل میتونید نذارید بعدا اعمال کنید سافت مکس رو بهش و حالا اون لیبل خروجی رو بگیرید حالا اینکه
46
+
47
+ هر کدوم از اینام چیه خب فلت اینکه هر ورودی بگیره بر اساس دایمنیشنی که مورد نظر شماست فلت میکنه در واقع اون ورودی لینیر که در واقع همون ام ال پی ساده است معروف‌ترین در واقع اکتیویژن فانکشن حالا الان مدل‌های سیلو و جیلو و اینا اومدن تاثیرات دیگه دارند حالا شما میتونید ان تا مدل رو به صورت سیکونشیال پشت هم فرا بخوانید ما تو هر مدل دو تا بحث پارامتر داریم یکی پارامترهای مدله که میشه همون وزن ها بایاس ها یک یک سری هم در ��اقع اون قضیه هایپر پارامتر هاست که سایز چقدر باشه لرنینگ ریت چقدر باشه اینا رو با هم قاطی نکنید حالا شما میتونید اگه مدلتون خیلی کوچیک باشه که فکر کنم تو تمرین های دستیتون داشته باشید میتونید بیاید در واقع ساختار و وزن های هر تیکه لایه تو رو با
48
+
49
+ دستورهایی مثل در واقع یه دونه حلقه بستن روی پارامترها خروجی بگیرید و یه بحث مهمی هم که حالا اینجا بهش پرداختیم اون فرم در واقع اون اتوگرت پایتورچ هست که همون فرایند محاسبه گرادیان برای حالا ماتریس‌های وزنتون که به صورت دستی شما میتونید این کار رو انجام بدید با در واقع فراخوندن یک دستور از بیشترین شده بک ورد شما ماتریس ورودی تو ایکس هست نیازی نیست گرادیان براش حساب بشه برای همین فراخونیم که این پارامتر ریکوردش رو ولی وزنتون رو میخوید گرادیان حساب بشه بعد هم که میخوید ضرب کنید در همون روش یه دونه اکسپوننشیال بگیرید در واقع حالا اینجا بخونید ریاضیاتش رو نوشتم برای محاسبه در واقع گرادیان وزن دو روش داریم یا وای و دات بکوارت کنیم میاد از آخر به اول میره و هر جا که گرادیان نیاز بوده تو ماتریس گرادیانش رو حساب میکنه یه بار
50
+
51
+ مشتق زنجیره‌ای بگیرید و دستی حل کنید و باز گرادیانش رو در بیارید که حالا من در مورد دیتر چند پایینتر صحبت می‌کنم اینجا هم دو تا روش رو در واقع مقایسه کردم و نشون دادم گرادیاناش یکسانه خب حالا شما می‌خواین یک تیکه از مسئله‌تون گرادیان نداشته باشه یا اون ماتریستون رو که تعریف کردید بدون گرادیان میزارید یا نه الان توی مرحله هستید میخوید ترینتون گرادیان حساب بشه ولی برای ولیدیشن نمیخواهیم حساب بشه و تو تستمون که کلا نداریم هیچی دو روش داره یا بیایم با یه دونه ترش نوگراد فراخونی کنیم و از اون به بعد توی در واقع اون حلقه ما هر کاری کنیم هیچ گرادیانی حساب نمیشه یا از دستور دیچ استفاده کنیم که گرادیان را در واقع محاسبه نمیکنه فرقی هم نداند با هم تا اینجا هیچ سوالی نیست
52
+
53
+ چیزهای ساده تند تند رد میشیم میریم حالا جلوتر ببین خب الان ترین داری انجام میدی یه بک میبینه گرادیان حساب میکنه شبکه آپدیت میشه شما هر ایپاکی که تموم میشه خب یه ولیدیشن میخوای دیگه تا اینجای کار چیکار کردی خب تو ولیدیشن ما نمیخواهیم گرادیان حساب بشه چون قرار نیست شبکه به روز بشه اتفاقی که میفته اینجا اینه که یا باید بزار حساب شه ازش استفاده نکنیم محاسبه الکی انداخت تو گردنش یا کلا هم خب مدلتون میخوای دیگه تموم شده مدل میخوای اکسپورت بگیری دیگه گرادی نمیخوایم دیگه از اونجا به بعد دیگه بدون گرادیان چیز حساب خب در مورد هایپر پارامترها که صحبت کردم لرنینگ ریت حالا میتونیم ثابت داشته باشیم یا براش در واقع اسکجول تعریف کنیم که حالا رینگ ریت حالا بر اساس معیار خاصی
54
+
55
+ باشه یا کسینوسی هی افزایش کاهشی باشه که در واقع ما از لوکال مینا خارج بشیم یه بحث هستش که شما می‌خواین در واقع اون لاس فانکشن رو چی تعریف کنید باز خب ماژول ان ان خودش یه تعداد زیادی فانکشن رو در واقع تعریف کرده حالا انتروپی کراس انتروپی و مدل های دیگه یه خوبی پای ترش اینه که به شما این در واقع آزادی رو میده که میتونید فانکشن های خودتون رو هر گونه ای که هست تعریف کنید حالا در فایل بعدی من یه داستان پیچیده هم براتون نوشتیم خودتون میتونید کار کنید حالا تو تنس فلو باید یه دونه کد بنویسید جداگانه که حالا فراخونی بشه بتونید تغییر بدید ولی تو پای همه چی دست شماست و خیلی تو کارهای تحقیقاتی میتونه کمکتون بکنه اپتیمایز هم که خوب اپتیمایز های معروف تو پایتون هستند حالا اس دی عدم دبلیو
56
+
57
+ و بر کارهای دیگه که حالا کدوم دقتش بیشتره دبلیو ادب فقط کنده به خاطر کندی ممکنه هیچ وقت به حد آخرش نرسه خیلی سریع میره ولی همیشه یه خطای ماندگاری اون انتها داره حالا عدم و عدم دبلیو دو مدل مختلف که تمرین فکر کنم بهتون دادیم که مقایسه انجام بدید باهاش ببینید چه جوریه که حالا فرا میخونید پارامترهایی که میخواد براش گرادیان حساب شه رو بهش میدیم که معمولا پارامترهای مدلمون هست لرنینگ ریت بهش میدیم اگر حالا بخواهیم اون عملیات ریگولاریزیشن انجام بشه برامون حالا ال وان ال تو اینجا مشخص میشه که یک مقدار از در واقع پیچیدگی محیط کم مدلمون کم کنیم دقتش بهتر
58
+
59
+ و این از این شما برای تو پای ترش برخلاف تنسور که فقط یه مدل دات فیت میزنید و خودش تمام اقدامات را انجام میده شما اینجا مجبورید یک حلقه‌ای برای ترین و یک حلقه برای حالا تست یا ولیدیشن به صورت جداگانه بنویسید تو این حلقه شما دیتا لودرتون رو میارید مدل رو میارید حالا لاس فکشن و اون اپتیمایز های که مد نظر هست و حالا هر چیز دیگه که اضافه تعریف کردید از دیتا لودرتون حالا بچ و اون ایکس مورد نظر رو اون بچ که گفتید چرا چیز میکنیم ما اینجا یه بچ فرا میخونیم یه ایندکس بچ داریم که با میاد میگه وجه صفر وجه یک دو سه و حالا اون ۶۴ تایی که فرا میخو اینا رو من از قبل رو دیوایس قرار دادم اگر ندادم شما نداده بودید اینجا اولین مرحله اینه که ایکس رو بزارید رو دیوایس حالا جی پی یو سی پیوتون وای
60
+
data/Pytorch_Session_transcript_part2.txt ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ همینطور چرا چون مدلتون رو اون دیوایسه ایکس رو به مدل میدیم پردیکشنش در میاد لاس فانکشن رو حساب میکنیم حالا کلاس فانکشن حساب کردیم رو لاست باید یه بک وارد بزنیم دیگه قبلش میایم اپتیمایزرون زیروگرت میکنیم تمام گرادیان های که از ایپاک قبلی بوده رو صفر میکنیم در واقع هر بخش گرادیانش با بچه قبلی فرق داره دیگه شما صفر میکنید لاس و بکوارد میکنید اپتیمایزر تو یک واحد استپ میشه در واقع اعمال میکنه و از های جدید به مدل اضافه میشه گرادیان افزایش پیدا الکی دروغ یه گرادیانی برای هر ماتریس چیز میکنه ببین شما ماتریس گرادیان شما هر بار که بار میکنید گرادیان هر خونه حساب میشه استپ که میکنید اعمال میشه به چیز در واقع میاد وزن مثلاً یک یک و مثلا یه ماتریس
2
+
3
+ سه بعدی داشته باشی به اندازه دو دهم قرار مثبت تغییر کنه دفعه بعدی این دو دهم تغییر کرده قرار نیست دوباره تغییر کنه پس صفر مگه اینکه یه بعضی موقع‌ها یه مشکل پیش میاد شما قراره که در واقع یه مدلی رو ترین کنید ولی جی پیوتون نمیزاره مثلا جی پی یو من الان ۸ گیگ ویرم داره من اگه یه مدل بسیار بزرگی رو لطف کنم و بخوام ترین کنم که هفت گیگ از در واقع چیز منو گرفته ویرم جی گرفته نمیتونم سایز مناسبی رو انتخاب کنم و مجبورم دو خب الان بذاریم دو چه مشکلی پیش میاد اصلا تفاوت سایز سایز چه اختلافی ایجاد میکنه نه در واقع اینطوری که خیلی پایین باشه روند خیلی نویزی میشه چون هر داده یه حرفی رو میزنه
4
+
5
+ و مدل هی باید بپره بین این داده اون داده خیلی نویزه فول بچم دقت درستی نمیده حتما بهترین دقت و فول بک نداره اتفاقا شما بیاین مثلاً چند تا مدل مقایسه کنی نمودار رسم کنی اون وسط مسا بچه ۱۲۸ ۲۵۶ بهترین دقتو داره چرا چون در واقع هم از خاصیت نویزی بودن استفاده می‌کنی نویزی بودنم برای ما خوبه چون اگه تو مثلاً به جای که هزار تا داده رو ببینی ۲۰۰ تا رو دیدی دفعه بعدی0 تای بعدی که داری نگاه میکنی باعث میشه که در واقع اون خاصیت نویزی بودن از یک مسیر بنداز یه مسیر دیگه و حالا تو اون کانوکس پیچیده اش به جای بهتری میتونیم برسیم و خب تغییراتمون هم بزرگتر میشه دیگه هرچی بچه ها کوچکتر باشه تغییرات بزرگتر احتمالش است آره چون نویزی شده دیگه
6
+
7
+ خب حالا الان چیکار کنیم که نمیتونیم بچه مثلاً بزرگتر از دو بدیم بچه دو که خیلی نابده دیگه مدل هیچ وقت نمیشه همه دیتاها رو میاد مثلا هر ایپاکتون مثلا ۲ میلیون وجه داره خیلی روند که طولانیه خیلی هم که نویزی حرکت میکنیم چرا چون هر دوتایی که وداره میاد یک بار بکوارد میده اون بک و باید حالا بیاد اعمال کنه چیکار میکنیم چون ممکنه الان تو تمرینتون شما به این بخورید چجوری یعنی اصلا دیتای لود کردنش مهم نیست اون بچه مهمه مدل حجمش خیلی بزرگه مدل مثلا نزدیک ۵۰ میلیون پارامتر داره
8
+
9
+ ۵۰ ۲۴ میلیون پارامتر دارد لودش می‌کنی ۴ گیگ میره که تاثیر نداره آره شما میاین میگید آقا من از خاصیت جمع شوندگیش استفاده می‌کنم مثلاً بچه سایزش دوئه شما میخوای ۱۶ هشت بار روند رو ادامه میدی لاس فانکشنت همینطور داره هی بکوارد میشه اون گرادیانه ماتریسه صفر نمیشه دیگه هی افزایش افزایش یک بار این رو اعمال کنی و دوباره صفر میکنیم حالا خودش روش های خیلی خاص خودشو داره اکوملیشن گرادیان اسمش و روش های مختلفی داره بعضی ها میان نرمش میکنن تقسیم میکنن به تعداد حالا اون دیتا بچه هایی که برداشتن بعضی
10
+
11
+ چرا حا��ا تقسیم می‌کنند به خاطر اینکه اون گرادیان اکسپلودینگ اتفاق نیفته یهو یه گرادیان خیلی بزرگی رو بکوارد نکنیم به داستانمون بعد حالا اینکه دیگه برای نمایش میاد حالا اگر باقی مونده در واقع بچه‌ها به ۱۰۰ صفر بود میاد یه دونه در واقع لاست رو بهت نشون میده که لاست چقدره توی تست لوپمون هم دقیقا همین روند رو داریم با این تفاوت که ترش فراخونی میکنیم چون نمیخواهیم گراین حساب شه از اون طرف اپتیمایزر و بکوارد و اینا نداریم فقط میدیم به مدل اون پی که در میاد رو یه لاس حساب میکنیم و ازش یه آرگ مکس مثلا اینجا گرفتم که کلاسش در بیاد مقایسه میکنه ببینه آیا این با لیبل ما یکسان بوده یا نه که یه اکیرسی برای شما تولید کنه این از این و در نهایت هم میرسیم به اینجا که خب حالا
12
+
13
+ تعریف کردیم اپتیمایزر رو تعریف کردیم تعدادی پاک مورد نظرتونو تعریف می‌کنیم حالا می‌خوایم سریع باشه ۴ یه حلقه مینویسم به تعداد ایپاک ها ترین لوپ و تسلوپ رو هی فرا بخونیم دیتای مورد نظر ترین و تست رو بهش میدم که جدا از همه مدل حالا و بهش میدم یه جا رو ما آها ببینید آره من اینجا عوض کردم الان میگه آقا دو تا روی دیوایس نیست یکیش رو کودا یکیش رو سی پی یو نمیتونی ران کنی اینو خودم و در نهایت هم که مدلتون ترین بشه شما باید سیوش کنید یا وزن ها را سیف میکنید یا کل مدل رو اگر استیت شد سیف کنید فقط وزن ها را سیو میکنه اگر کل مدل رو سیف کنید کل مدل سیف میکنید و ما باید بدید تحویل بدید دیگه ما در واقع شما این تیکه رو بعد از هر تمرینتون
14
+
15
+ لطف کنیم رو دیتای خودمون که جدا از دیتاهای شماست مثلاً ران کنیم و حالا اگه اکیرسی خاصی مد نظر ما بود بهش برسیم آره کلاً ساختار استراکچر و همه اینا رو فقط یه دیکشنری از وزنا آره خب از اینجا سوال نیست گذاشتم تو اسلاید بعدی توی فایل بعدی میبینیم دات pth این برای پایتون اچ فایو هم میتونید سیف کنید آره اچ فایو میزنیم بعد حالا اینکه یه مدل سیف کردن حالا اگر بخواهید واقعا تو پروژه هاتون از یه مدل استفاده کنید مدل ترین کردید و نمیخواین مدل خیلی اینطوری باز باشه چون الان شما
16
+
17
+ فراخوانی کنید مدل وزن داشت بره بشینه روش و حالا مدلو هی بگه آقا بزار رو ترین باشه بزار رو ایول باشه اکسپورت می‌گیریم ازش حالا روش‌های خیلی مختلفی از تنسور آرتی هست اونیکس هست شما میاید در واقع یک بار با استفاده از یه لایبری به نام اونیکس مدلتون رو فراخونی میکنید بهش میگید آقا ورودی ها میتونه متغیر باشه حالا ثابت باشه و یه اکسپورت یک فایل تک به شما میده که شما میتونید ببرید بزارید مثلا بین مدل های دیگتون روی رباتتون روی حالا سیستمتون و فقط ازش ورودی و خروجی بگیرید دیگه به ساختار مدل نمیتونید دست بزنید که مثلا یه جا اشتباه پیش بیاد ساختار مدل عوض بشه وزننا عوض بشه یه اشتباهی این اکسپورت های که حالا گفتم اگر پروژه بعضی هاتون رباتی و اینجور چیزاست کاربرد داره بستگی داره سنسور آرتی رو آر تی چیه اون
18
+
19
+ مدل بهت میده دیگه بهش راحت ورودی میدی فقط خروجی رو میده بهت هیچ کاری نمیتونی رو مدل بکنی فکر کن یه شرکتی دارید و اون شرکت میخواد یه مدلی رو بفروشه شما اون اونیکس رو در میارید دیگه کسی نمیتونه ببینه اونیکس چه شکلیه و وزنشو تغییر بده رو هرچی که بگی سی پی رو جی پی یو رو موبایل پایتونه دیگه یه سوال نه هیچ فرقی نداره همه چی یکسان تو درایو بعد حالا یا دانلودش کنی یا حالا در اشتراک خب این تا اینجا بود در واقع برای ساده که تمرین الانتونه و فکر نمیکنم هیچکس هم بره سراغ پایتون
20
+
21
+ سخته یه کوچولو اینجا شما می‌نویسی اونجا یه مدل داد فیت میزنی یه اپتیمایزر ۱۰ تا چیز میگیره ولی خب باید توی اون اگر بخواهید تغییر ایجاد کنید باید مهارت کد نویسی بهتری داشته باشید که بخواهید چیزهایی از البته الان خیلی پیشرفت کردن همشون سعی میکن در رقابت با هم یک چیز رو ارائه کنند ولی اگر ضبط میشه دیگه همه چی الان یکسانه ولی حالا انتهای این میبینیم نالج دیسلیشن آورده ولی همه چیش دست شماست لا فشن که تعریف میک نحوه ترینینگ که میخوای همه چی دست شماست و پایتون این در واقع دسترسی آزادش اینجاست که این صفحه هیچی دیگه سوالی نیست بریم بعدی خب حالا میدونم یه
22
+
23
+ تموم نشده بگم یه ببینیم با هم چون تمرینشو ما میدیم برای همین امشب گفتم قراره تمرینشو من بدم ددلاینش خیلی بده ها ولی دکتر گفتن که فرصت داشته باشید روش فکر کنید کسی که دوست دارید آره چون ممکنه بعد دوباره من بیام ولی نمیدونم فرصت بشه دم تمرینتون برسه یا نه میخوین بگم اگه وقت هر کی حالا اگه دوست داشت میتونه بره خب تا اینجا پس ما فهمیدیم اپتیمایزش چیه دیتا ست چجوریلود میکنیم و حالا اون مدل رو چجوری تعریف میکنیم از اینجا به بعد حالا ما میخویم مدل ببریم ام ال پی که بود
24
+
25
+ تنها تفاوت‌ها اینه که حالا باید کانولوشن بزنیم مکس پول بزنیم حالا انواع اینجور چیزا هدفمون توی این کد در واقع اینه که یک بار این اقدام رو بر روی دیتا ست سیفارتن انجام بدیم قبلی رو بردارم از رو جی‌پی‌یو خوب در واقع ۱۰ تا کلاس داره که عکس ها ۳۲ در ۳۲ میتونید بگیرید موضوع خوبی هم میبینید نداره و هدف کلاسیفیکیشن در واقع این ده کلاس هست هم داریم که ۱۰۰ کلاسسه و خیلی خوب دقت بهتری اینجا ما چند تا هدف داریم یک زدن یک شبکه در واقع از ابتدا بهش میگن از خودتون شبکه رو تعریف کنید از صفر با وزن های رندوم مدل رو ترین کنید یه حالت داریم نه بیایم
26
+
27
+ استفاده کنید و فقط اون تیکه کلاسیفیکیشن آخر رو در واقع استفاده کنید ترین کنید یا مثلاً پریترینتونو فاینتیون کنید کلاً رو دیتا ست خودتون که انواع مختلف یا نالجیستریشن که حالا انتهای این میگم یه رابطه بین استاد و دانشجویی داره استادی میاد سر کلاس دانش خیلی بالایی داره شروع میکنه یه منطق یک کتاب رو به زبان ساده تر برای شما گفتم و شما از اون منطق ساده تر یاد میگیرید تفاوتش در اینه که به جای که لاس فکشنتون بیاد از تو لیبل ها استفاده کنه برای محاسبه ارور میاد تیکه از خروجی مدل قوی تر رو استفاده میکنه این باعث میشه مدل کوچکتر توانایی بهتری پیدا کنه که خب خیلی استفاده داره دیگه شما فکر کنید یه مدل ۲۳ میلیون پارامتری قراره روی گوشی موبایل ران کنی نمیشه که میای با این روش ها یک مقدار اون مدل
28
+
29
+ ۳ میلیون پارامتری رو دقتشو می‌بری بالاتر و از اون استفاده کن که حالا جلوتر خب مثل دفعه قبلی دوباره من باید یه ترین لوپ و تستلوپ بنویسم که همونه فقط نحوه در واقع چیزها تغییر می‌کنه شما می‌تونید مثلاً یه کوچولو دست ببرید اون لاستون اگر سایزتون کوچیک بود یا مثلا میخوید به صورت بار پر شه که داره مثلا چند درصد چند درصد میره جلو این وگرنه این کد بزارید تو کدتون تا آخر تحصیلتون همین یه کد کافیه برای همه چی بعد اینو تعریف میکنیم سی ان ان رو باید تعریف کنیم که حالا میایم دیگه میایم بر اساس چیزایی که هنوز نخوندید کانولوشن رو در واقع اعمال میکنیم رو عکس ها به صورت پنجره ای حرکت میکنیم و دلیلون چیه که کاندیشن بهتر از ام ال پی رو عکس
30
+
31
+ لوکال به هر قضیه نگاه میکنه این لوکال نگاه کردن مهمه شما نمی‌تونید فردا بیاین هر پروژه‌ای که حالا دارید تو ارشدتون رو بدید به مدل سی ان ان اگه قضیه لوکالیتی مهمه میتونید بدید اگه لوکال مهم نباشه یا داده هاتون هیچ ربطی به هم نداشته باشن نمی‌تونیم از مدل های سی ان ان استفاده کنیم دقتش خیلی پایین تره اونجاست مثلا میتونید استفاده کنید یا حالا اگر بشه ترانسفور یه محاسبه داره اینکه چنل ورودی تو چی باشه چنل خروجی چی باشه کل سایزمون چی باشه حالا اون پامون قضیه اش چیه چنل ورودی که خوب همواره عکس ورودی تون آر جیبی یا حالا مونوکروم تک رنگه یا یک یا سه چنل های خروجی رو شما به صورت خیلی آروم میتونید افزایش بدید مثلا از سه به ۱۶ ۱۶ به ۳۲ ۳۲ ۶۴ همینطور برید بالا یا میتونید پله ای بپرید مث از سه
32
+
33
+ بمونید بعد یهو برید ۶۴ دوباره چند لایه بمونید حالا بستگی به اون فیچرزایی که از تصویر میکشه بیرون سایزمون هر چقدر بزرگتر کنیم اون لوکالی رو بیشتر نگاه میکنه فضای بیشتری نگاه می‌کنه خب اگه عکستون حالا اینجا ۳۲ در ۳۲ ابعادی نداره که من بخوام ولی مثلا عکستون اگر ۶۴۰ در ۶۴۰ باشه بخواهیم مثلا کل سه بزنید روش چیز خیلی خاصی در نمیاد ۱۱ معمولا میزنم روش که اون قضیه لوکال رو بیشتر دقت کنید چون خیلی پیکسللاش زیاده حداقل هیچ چیزی هیچ آبجتی در واقع تو اون ۹ تا پیکسل دیده نمیشه هیچ فیچرز نداره پینگ سیم حالا بزنید یا پینگ صفر یک اینا بزنید باعث میشه حالا اون محاسبه ابعاد عکستون به هم نریزه و یه دونه هم داریم به نام استرا فکر کنم که این شیفت بین ویندوهایی که در واقع داریم میریم جلو خب
34
+
35
+ کانگولوشن می‌زنید یه رلو می‌خوره روش یه بحثی هم داریم به نام حالا دراپ اوت دو بعدی چه تفاوتی داره با دراپ‌ها به جز اینکه دو بعدیه ببین شما میتونی یه عکس فرا بخونید و حالا تک پیکسل‌ها رو خاموش کنیم چه تفاوتی داره که تو یه عکس سه تا پیکسل خاموش باشه عادی زدیم و هیچ کاربردی نداره و الکی مثلا اون پیکسل ها رو سوزوندی مثلا اطلاعاتشو ما اگه بخواهیم واقعا از استفاده کنیم توی در واقع سی ان ان یا باید بیایم در واقع دو بعدی استفاده کنیم یا از بلاکش استفاده کنیم که سه بعدی میشه و در واقع میاد یک ناحیه را یهو آف میکنه یک فیچرز رو از تصویر یهو قطع میکنه و باعث میشه که یک مقدار مثلا حالا اون قضیه های که دنبالشیم
36
+
37
+ مکس فولم که در واقع ابعاد رو کوچیک میکنه بچ نورم که حالا بر اساس اینه که خروجیتون رو نرمالیزه کنه و همواره هم در واقع خروجی اون چنلات این رو به همین صورت می‌بینید ادامه دادم یه مدل سیکوئنشیال چند تا اومدم اینپ براتون نوشتم که هرچی کی میشه بعد فلتن میشه بشور میخوره روش دوباره یه ام ال پی و دراپ اوت وی هم ادامه پیدا میکنه آیا این بهترین ساختاره نه بعد امتحان کنید تجربه ای میرسید به اینکه خیلی بهتر چه چیز کنید مثلا یکی از کارا اینه که آقا بعد از اینکه سی ان ان تو خروجی داد بیش از دو لایه دیگه اتفاق خاصی نمیفته معمولا دیگه ته تهش دو لایه اینجا سه لایه گذاشتیم دو لایه دیگه پشه و اگر خیلی مثلاً
38
+
39
+ خروجیتون بزرگ بود می‌تونید حالا به جای اینکه مرحله آخر یه مکس پول بگیرید حالا از ادپتیو یا گلوبال اوریج پولینگ استفاده کنیم میاد تمام لایه‌ها رو یهو سفت می‌کنه یا تمام پنجره رو سفت می‌کنه یکی می‌کنه مثلاً یه هفت در هفت داشته باشید در ۱۲۸ یهو میکنه فقط یه بردار ۱۲۸ تایی و خب یهو دیتاها رو خیلی کم می‌کنه دیگه و ماکس بین تمام اون خونه رو میگیره این کار معمولا انجام میشه بعدش که یه فوروارد مینویسی براش و مدلتون آماده است بعدم که مدل رو که ساختید رو دیوایس قرار میدید تمام پارامترهاش رو میتونید دو تا نکته که هست اینکه اوکی ما مدل رو ساختیم میخویم یه پارامترهایی اصلا ترین نشه این کجا در واقع کاربرد داره تو اون قضیه پیترین اینا شما یه مدلی دارید اومدی فول کانکت آخرش رو عوض
40
+
41
+ باشه اون فقط اون تیکه رو گرادیانشو تورو می‌کنی بقیشو آف می‌کنی که دیگه وقتتم نگیره بعد اینم بریم بعدم که میتونی در واقع سامریشو ببینید چه جوریه من الان خب یه عکس ورودی گرفتم و خروشیم ده تاییه میام تعریف می‌کنم با عدم هم هست در واقع همون ساختار هست تروپی که برای چیزه هم که در واقع همون رگولاریزیشن ال تو در واقع میاد یه مقداریزیشن رو بهتر میکنه اور فیت شدن به داده ها کم میشه و دقتتون باید افزایش بده این مثلا این کد اینطوریه که هر که ۳۲۰۰ تا رو یه لاس فانکشن به من اعلام میکنه در نهایت هم یه اکیورسی رو داده های ولیدیشن شما حالا دوست دارید اینو یه مدل دیگه نشون بدید دیگه ویژوالیزیشن
42
+
43
+ داستان هر کاری دوست دارید می‌تونید انجام بدید خب قبل اینکه بریم روی ولیشن دیگه چیکار میتونیم بکنیم برای بهبود داستان بهترین لاست فانکشن رو پیدا کردید اپتیمونم بهترینه ساختارمونم نمی‌تونیم تغییر بدیم دیگه یه چیزه پایپ پارامتر داری چی تغییر دیلرنینگ ریتا رو میتونی عوض کنی در واقع سایز میتونی عوض کنی و شما یه مدلی گذاشتی ۵۰ پاک بره خب از یه جا به بعد دیگه دقتش افزایش پیدا نمیکنه و فقط از اینجا به بعد چه اتفاقی میفته اور فیت میشه رو داده ها شما میتونید تابع های دلخواه تعریف کنی و بیای این رو قطعش کنی اگر
44
+
45
+ ۵ ایپاک میزان اکیرسی کمتر از یک درصد ترشولد بزارید تغییر کرده دیگه بسه ۵۰ تایی پاک نره چیزی نیست مثلاً من الان مدلی دارم که ۹۰۰ تا هزارتایی پاک داره میره هزار ای پاک دو هفته طول میکشه بره آره رو ولیدیشن اکیورسی میگیرم یه بچه ۱۰۰ تایی که ورمیداره میگم مثلا میگم دقیقا چند درصد شبیه اون داستان مائه میگه مثلا ۸۵ درصد ۸۹ درصد ۹۲ درصد همینطور میره بالا نه داره میتونید استفاده کنید میگم الان خیلی اینا گسترش پیدا کرده یه سرچ بزنی هم خود پایتورش داره هم میتونید کتابخونه های دیگه رو با پای ترش قاطی کنی همه رو میتونی استفاده این دیگه خیلی بیسیکشو من آوردم
46
+
47
+ که فقط یه صحبتی در مورد همه چی کرده باشه تفاوتش اینه که الان این اقدام را انجام بدی مثلاً ترینت ۷۲ درصده ولی ولیدیشن ۵۳% چرا چون داره اول یاد میگیره خیلی شبیه اوناست دیتایتره ولی ولیدیشن ممکنه اصلا یه دیتا ست دیگه باشه آره مثلا تشخیص یه آبجکته یه تشخیص یه رنگه کار شما میتونید دو حالت بیاید دیتا ست اولیه را بیاری تقسیم بر مثلا ۸۰۲۰ بکنی عین همن دیگه یه شافل هم کردی تقسیم بر هشت بیست کنی ۸۰ درصدشو بزاری برای ترین ۲۰ درصد بزاری دقتت خیلی میره بالا بعد مدلی که داری نباید مثلا هفت هشت درصد دقت داره به کارفرما یا استاد میدی اون رو دیتای خودش تست میکنه میگه که ۸۲ درصد چرا چون دیتاهای اون با دیتای تو فرق داشته
48
+
49
+ بهتره که مثلاً اگر کلاس‌هامون خیلی زیاد نه کلاسمون چه جوری بگم امکانشو دارید که دیتا ست‌های مختلف داشته باشید یه تیکشو اصلاً کلاً ندید بهش بذارید برای تست و ولیدیشن حالا جنسشم ممکنه خیلی شبیه اونا نباشه مثلاً فکر کن رنگو میخوای تشخیص بدی رنگ این میزو امروز تو این نور عکس گرفتی فردا توی نور دیگه عکس گرفتی و نور رو رنگ خیلی تاثیر داره شما یه شافل کنی بهش بدی جفتشو دیده برای همین تو ولیدیشن جفتشو اگر باز ببینه دقت خوبی بهت میگه ولی اگر نه یه روزشو بزاری برای ولیشن یه روزشو بزاری برای تست و ترین یهو میبینی دقت خیلی پایین بالا شده اونجاست که باید بیای بری حالا چیکار کنی که در واقع جنزیشن توبری بالا آگمنتات عوض کنی نور یکم بازی کنی مثلا خودت باهاش و کارای دیگه که بخواهیم توضیح حالا مدلتونو شما رفتید و
50
+
51
+ می‌خواهیم دقت نهایی را گزارش کنید یه وریدیشن حالا می‌تونید بنویسید که حالا بیاین دقت همه چیزها را به شما بگه من اومدم یه بار روی در واقع دیتای ترین ولیدیشن گرفتم یه بار روی خود دیتای ولیدیشن و یه بار تست فقط کردم که ببینم درصد چطوره می‌بینید که مثلاً الان دو تا چهار تا پاک رفته چقدر رفته پنج تا پاک رفته خب اتفاق خیلی خاصی نیفتاده ولی اگر بیشتر بزارید اختلاف گام بزرگتری میشه بعد شما میتونید این رو به انواع مختلفی گزارش کنید مثلا یه بحث دیگه اینه که آقا تو هر کلاس چقدر خطا دارم من الان من ۱۰ تا کلاس دارم و چند درصد خطا دارم مثلا میبینید که مثلا هواپیما رو ۷۴ درصد دقت داشته ولی اصلا گربه و پرنده رو نداشته چرا چون هیچی یاد نگرفته در موردش و از اونور مثلاً ترا ۸۳ درصد مثلا بخش بعدیمون
52
+
53
+ در واقع ترنسفر لرنینگ استفاده بکنیم شما دوباره دیتا ستی رو میخونی میای به با استفاده از اون ترانسفورمرا که گفتم ترانسفورما رو تعریف می‌کنی ریسایزش می‌کنی رندوم هوزنتال فیلیپ میزاری اینا یه آگمنته به یه درصدی اعمال میشه روی در واقع دیتا ست که میخونی و تو تنسور هم که فقط میبره صفر تا ۲۵۵ عکس رو بین صفر تا یک و حالا تستمونم که حالا میمونه فقط میخوام ری سایز بشه تو تنسور بشه نمیخوام آگمنت چیز دیگه داشته باشه میام تقسیم میکنمش و حالا دیتا ستش لود میکنیم که اینم چیز خاصی نداره یه مدلی رو باید فرا بخونیم خب مدل چجوری مدل فرا میخوانیم یا باید وزنی داشته باشید که خودتون قبلاً ترین کردید میخونید میاد یا باید این مدل رو از یه جایی تو اینترنت بردار
54
+
55
+ خود پای ترچ مثل تنسوفلو مثل کراس الان خیلی از مدلا رو ورژن‌های مختلف براتون قرار دادم شما این رو میارید مثلاً الان من رزنت ۵۰ رو وزناشو از روی خود پایتون فرا خوندم روی چی ایمیج نت ورژن ۱ الان ورژن دوشم گذاشته دقتش مثلا یه مقدار رفته بالاتر این یه مدله یه مدلم هست در واقع یه لایبری برای هاگینگ فیس اگه اشتباه نکنم به نام تی بعد تیم اومده گفته من فقط کارم اینه که تمام مدل های پریترین ورژن های مختلف رو در اختیار بقیه بزارم هم با پای ترش میخوره هم بتونید صفر میخوره شما میتونید با تیم برید یک ورژن خیلی خاصی از یه دونه مدل پریترین رو فرا بخونید و بیاریدش تی آی دبل خب من مدل میارم به عنوان بیس مدل من هستش فالس میکنم تمام پارامترهاشو گردش رو که نمیخواهیم
56
+
57
+ و یک سیکوئنشیال به عنوان لایه اف سی میندازم ته داستانمون که در واقع اون کار این تیکشو ما می‌خوایم ترین بشه اون کلاسیفیکیشن شما فرق داره مثلاً ایمیج نت رزنت ۵۰ فکر کنم هزار تا کلاس داره نمی‌دونم همچین چیزیه کلسیفیکیشن ۱ مثلاً به ۱۰۰۰ کلاس است ۱۰ کلاسو باهاش در نظر بگیرید و میای حالا اون ۱۰ کلاس رو انجام میدیم و آره آره یه شرکت های بزرگ مثل گوگل و اینا میان روی جی پی یو های خیلی زیادی که دارن میلیونی با دقت های خیلی خاص این در واقع این مدل رو ارائه میکن و ترین میکن یه مسابقه بوده دکتر گفته فکر کنم هنوز نرسیده میگن یه مسابقه است یه چند سالی برگزار می‌شده اینکه آقا دقت مثلاً شبکه های ویژه رو چجوری ببریم بالا هر سال هی شرکت های در واقع گروه های مختلف میومده مدل خودش می‌داده
58
+
59
+ رزنت میره جلو تا دیگه به جایی میرسند که دقتش فکر کنم از انسان بالاتر میشه ۹۹/۷ ایناست دیگه مسابقه تموم میشه و میگن بسه دیگه از اینجا به بعد هرکی هم میومده خب مدل خودشو ارائه می‌کرده مثلاً رزنتا چیز دارن رزجیال بلاک دارن از از یک لایه میره به لایه دیگه و باعث میشه اون گرادیانامون مثلا ونیش نشه اکسپلو نشه و هر کسی میوم یه مدل ارائه میداده الان خوب خیلی مدل داریم که پرینترین رو دیتا ست های مختلف و شما میتونید از اونا استفاده کنید این الان فقط ما از قسمت فیچرست استفاده میکنیم قسمت اول اون کانولوشن از اونجا به بعدشو شما برای خودت یه دونه در واقع فول کات میزاری به تعداد کلاس که میخوای حالا کلاسسیفیکیشن یا از همون فیچرز استفاده میکنیم مثلا چی
60
+
data/Pytorch_Session_transcript_part3.txt ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ مثلا رزنتا فکر کنم ۲۰۴۸ خروجیشه خب بعد از اینکه گلوبال اوریج میخوره یه فلت میشه یه ۲۰۴۸ در واقع بهت میده شما میتونید کانکشن یا نه مثلا ورودی چی بوده مثلاً ۶۴۰ در ۶۴۰ فقط این لایه فیچرز داره اینو مستقیما سیف کنیم پروژه پروژه فرق داره مثلاً پروژه من عکس ورودی ربات رو که میگیرم برای من نیم صفحه عکس ۶۴ در ۶۴ سیف کنم حجم بالایی داره میدمش به یه موبایل ورژن سه میارتش به ۹۹۶ تا دونه اونو سیوش میکنم نگه دارم یه بردار خیلی بهتر از یه عکس مثلا ۶۴ در سه کانال هست و این از این داره شما استفاده نمیک
2
+
3
+ چرا وقتی فرا می‌خونی بعضیاشو اینطوریه که مثلاً میگه اینکلود تاپ فکر کنم فالس میزنی اون تیکه آخر بهت نمیده یا مثل اینجا فقط لایه اف سیشو جایگزین می کنیم نه اف سیشو عوض کردم ببین اومدم تو بیس مدل دات اف سی فقط اونا فولی کانکت آخر میاد جایگزین میکنه دیگه و که زدم میایم در واقع اون عملیات رو انجام میدیم که حالا من اینو گذاشتم مثلا پاکی رفته دوباره بذاریم شروع میکنه به ترین کردن و رفتن دوباره ایوللیت میکنه این داستانا دیگه تکراریه اینجا خب دفعه قبلی اومدیم دقت رو اعلام کردیم هدفمون این بود که فقط بگیم مثلا تو
4
+
5
+ دقت کلی مدل چیه ما یه چیزی داریم به نام کانفیوژن ماتریکس و اینو دیگه گفتم شما خب یه دیتا ستی داری میخوای ببینی چه جوریه مثلا گربه و سگ شباهت زیادی به هم دارند پس اگر ما ببینیم گربه ۶۴۴ تا گربه تشخیص داده ولی بیشترینشو سگ تشخیص داده تو بقیه ۱۳۶ تا مثلا سگ تشخیص کدوم کلاس ها با هم نزدیکتره روند ترین چهه و اینا یه کانفیوژن ماتریکس در واقع تشکیل میدی که دیگه این از استفاده کردم اکیورسیژن و ریکال ویژه ماترییکس رو فرا میخونی در واقع تورولیبل وشن رو بهش میدی خودش دیگه حالا با حالت های خاصی که در نظر میگیری در واقع بهت این خروجی رو میده
6
+
7
+ بدون ترنسفرینگم اینکه فقط شما ساختار اون مدلو می‌خواید وزنشو نمی‌خوای اون اونا دیگه میگی من فقط استراکچر شما رو می‌خوام برای من فرقی نداره شما رو چی ترن کردی اصلا دیتا ست من یه چیز دیگه است یه کار دیگه‌ای می‌خوام بکنم به جایی که بیای مثلاً وزنه خاصی رو لطف کنی هیچی وضعشه فقط ساختارلود می‌کنیم و بهش مدلو می‌چسبونید و میزاری از صفر ترین بشه تا اینجا سوال نیست اضافه هم سوال بپرسید حالا تا اون بشه من نالجیستلیشن رو بگم یا واستیم یکم سوال بپرسید گلو منم خشک شد دو تا سوال بپرس پیاده می‌کنی
8
+
9
+ آره دیگه بستگی داره چجوری حساب کنی اگه بخوای اصلاً می‌تونی یه جوری محاسبه را انجام بدی که اون وزن‌های اینجا بشه اون چیزایی که میخوای ازش مشتق بگیری و با بکوارد مشتقشو انجام بدیم باز بستگی داره به تعریفریفتون خیلی چرا سرچ کنی در میاد تمرین یکتونه نه سرچ کنید داره یه چیزایی میاد اون یکم الان جدیده خب یهو میبینی فردا کلی سایت مدیوم اومده گذاشته مدیوم میدونید چیه دیگه نه اونم آخرش توضیح میدم یه چیزی رو من فکر کنم فراموش کردم برگردم بهتون بگم
10
+
11
+ یه دستورایی داریم به نام دات ترین و داتیول خب شما اگر تو مرحله ترین هستید بزنید مدل ترین اگر تو ایولیشن تست هستید بزنید مدلv این یه تفاوتی با داره چه تفاوتی داره چه اتفاقی توی مدل باید بیفته وقتی توی ترینیم و وقتی توی ولیدیشن باید یه تفاوت کوچک داشته باشد نه چه تفاوتی با نوگر داره خب الان من اینجا گذاشتم مدل دات ایول اینجا نوگر هم گذاشتم چرا دراپ
12
+
13
+ چون داده تست رو که نمیتونه فقط خودش یه پارامترهایی داره و داره اون پارامترهای عوض میشه روی هیپاک‌های مختلف برای همین مثلاً یکی پاک هیچ تاثیری نداره بالا یه خودی نشون میدن و اینم مهمه یعنی توی حلقه هاتون حتما باید دوتا رو بزارید خب بریم ترانسفر لرنینگ با نالج دیسلیشن حالا اینجا من سورسش هم گذاشتم مقالهش هم دو سه تایی هست میتونید برید بخونید انواع خیلی مختلفی هم داره من ساده ترینش آوردم تو تمرین هم ازتون همینه ها انشالله خواهیم خواست و اینطوریه که اون عکسو الان می‌بینید دیگه
14
+
15
+ اینطوری که خوب شما دو تا مدل میاری یکیش به عنوان حالا معلم و شاگرد اون یکیشم شاگرد در نظر می‌گیری تفاوت گسترده‌ای که این دوتا دارند اینه که تعداد پارامترهای یکی خیلی بیشتر از اون یکیه و یکی اصلا میتونه جفتشون پیترین باشند میتونه نه فقط تیچرین کامل باشه حتی در بعضی موارد بهتره اول خود معلمه رو یه فاینتیون بکنی رو دیتا ست خاصت به بهترین دقت خود خودش برسه یا مثلا رو حالا کامپیوتر یا مثلا چیز سرور مثل اچ پی سی شریف اچ پی سی بهترین دقت خودش که رسید حالا بیا یه مدل و بر اساس خروجی اون ترین کنیم به چه صورت به این صورت که شما وقتی دارید لاس رو بکوارد کنی فقط میاید تفاوت خروجی مدللت با اون تروبل واقعی تو نگاه میک و مجبوری برای اینکه این اتفاق بیفته از مثلاً سافت مکس که عبور
16
+
17
+ آرگم عکسم بگیری و بیاد بهترین اون بردار رو برداره مثلاً اومده بین سه تا کلاس گربه و سگ و مثلاً میمون گفته این عکس ۸۰ درصد سگه ولی ممکنه ۱۵ درصد گربه باشه ۵ درصد هم میمون و شما میاید در نظر می‌گیرید این خروجی این مدل بوده سگ چرا چون بیشترین خروجی رو در نظر گرفتی روش آرگی مکس گرفتی این مدل درسته میفهمه کارش خوب بوده یا بد ولی نمیفهمه چه بهتر از این باشه چون میگه خب تموم شد دیگه درسته حدس زدم لیبل میایم چیکار میکنیم میایم خروجیش رو با خروجی اون معلم میسنجیم که اومده گفته ۹۵ درصد سگه ۵ درصد اشتباه داره و این دو تا خروجی رو دیگه با هم در نظر میگیریم این یکی از مدل های که خیلی الان استفاده میشه ازش و
18
+
19
+ دقتش بره بالا و در واقع اون لاجیت‌ها رو با هم مقایسه این حالا میاد یاد میگیره آهان من الان میدونم این ۹۵ درصد باید سگ می‌بوده من ۸۵ درصد سگ دیدم مثلاً ۹۰ درصد سگ دیدم ۱۰ درصد من هنوز مشکل دارم و میاد یه در واقع لاز فانکشن رو این تعریف میکنه و ادامه میده حالا اینطوریه که دو تیکه است با دو سه تا ضریب تمچر و فکر کنم یه لاندا میاد میگه خب مثلا ۵۰ درصد تو لیبل ها رو با چیز حساب کن یه وزنی بده به لیبل های که تیچر میده یه ۵۰ درصدش هم تولیبل در نظر بگیر که حالا با بازی کردن این پایپ پارامترهاش میتونید صددرصد از معلمه ببین اگه معلم خوب کار میکنه و اگر ۵۰ ۵۰ ببینی ۲۰ ۸۰ ببینید دیگه بستگی به کاربرد این الان اوکی شد یا
20
+
21
+ تو لیبل خروجی تیچره چیه خروجی تیچره هم یه دونه برداره میاد احتمالا رو میگه دیگه میگه این عکسی که به من دادی من با یه مدل مثلاً خیلی بزرگ خیلی دقیق اومدم گفتم این مثلاً انقدر احتمال داره مثلاً سگ باشه مثلاً ۹۵ درصد سگ باشه ۵ درصد احتمال داره چیزای دیگه باشه بعد شما میای روی این چیکار میکنی یه مکس میگیری که بتونی ببینی لیبل درست حدس زدی یا نه دیگه خب این الان شما به جای که آرگ مکسش بگیری بدی بهش میای همین وکتور لاجیت رو مقایسه کنی با استودنت استودنت میگه خب من باید خروجی این رو به این صور�� در میوردم ۹۵ درصد سگ باشه مال من ۹۰ درصد پس یه ارور میده این خودش یه ارور بعد میاد در نظر میگیره خب من اینو بیشتر مثلا ۵ درصد گربه دیده
22
+
23
+ تیچره یه درصد دیده دوباره یه ارور اینا رو دوباره بکوارد میکنه باعث میشه مدله حالا دقت بهتری از قبلش داشته باشه چرا چون قبلش میگفت خب من سگ دادم دیگه کارم درست بود دیگه مثل اینه که یه امتحان از شما بگیریم انقدر امتحان آسون باشه همه ۲۰ بشن دانش همتون ۲۰ بوده نه حالا یه امتحان خیلی سخت‌تر بگیریم همه ۱۰ میشن کمک می‌کنیم که در واقع بهتر تحلیل داده بشه اون استودنت نه فقط از دقت چیزی که قبلا بوده میتونید در حد دو سه درصد بهتر بشه باز هم بستگی داره به تعداد پارامترهاش اون ضریب های های پارامترها همینطوری مثلا فقط اینو زدم آوردم مثلا ببینی شاید دقتش یه درصد هم شاید افزایش پیدا نکنه خودتون ران کنید توی بالا باید بزارید و خود تیچر هم باید خیلی خوب ترین بشه
24
+
25
+ وکتور اولیه چه وان هات ریلیبل ۱۰۰% صفره خب ببین درسته ولی با بهترین چیز نمی‌تونیم مقایسه کنیم اون دیگه میگه توانم همینه دیگه خیلی افزایش پیدا نمیکنه ما میخویم یه رفتاری شبیه تیچره داشته باشه و بهترین اون عکس اینه که درست میگی یکیش یک باقی صفره مثل اینه که صددرصد گربه بوده ولی آیا اون عکسه واقعا یه شباهت کوچیکی به سگ بوده به گربه نداشته اینو که اون لیبل شما نمیگه تیچر ولی میتونه بگه تیچر دیگه عملا دقتش ۹۹.۹ و میاد وقتی اون میگه این ۵ درصد هنوز شبیه گربه است اون واقعا عکس شبیه گربه هم بوده پنج درصد و این تاثیر داره روی اینکه مدل های دیگش اینه که حالا بیایم با اینا بازی کنیم لاجیتاشو مختلف بدیم یا از وسط شبکه ها خروجی
26
+
27
+ با هم مقایسه کنیم که یکم پیچیده میشه چون باید دقیقاً خب حالا سایزاتون که ندا تو همه چیزا به هم بخوره می‌تونید در دو سه مرحله بیاین این کارو بکنید همش فکر کنم تو این سورسه که گذاشتم انواع مدل‌هاش هست سرچ هم کنید میاد انواع مدلاشو خود پایتورچ و اینا پیاده کردن ولی خب مثلاً شما بخواین از یه رزنت ۵۰ یا رزنت ۱۰۱ به عنوان تیچر در نظر بگیرید رزت ۱۸ بزارید و لایه های وسط بخواهیم بگیرید یکم سخت میشه چون خیلی اینا لایه زیاد دارن و ساختارهاشون فرق داره این کل دنیای دیگه است اون میاد ولیو تعریف میکنه برای کریتیک مثل یه نقاده میاد به عنوان یه داور یه مربی بالا سرت میگه این اکشننی که انجام دادی خوب بود
28
+
29
+ خوب نبود حالا با تولید کردن یک عددی به نام ولیو کیو ولیو و اونجا هم دو تا شبکه مختلف و یه کوچولو با این فرق داره حالا بخوای بدم توضیح میدم حالا دیگه فرمولاش هست اینا رو از خود مقاله درآوردم میاد تعریف میکنه مثلا آلفا تا از مثلا تیچر بگیره یک منهای آلفا ازلیبل ها بگیره و یه لاس فکشن تعریف کرده که حالا تو تعریفش میتونید همه چی رو بخونید اینجاست که شما میتونید خیلی راحت همه چی رو تعریف کنید میتونی بیای سافت مکس تعریف کنی که در واقع پارامترهای مختلف بگیره کس انتروپی خودتون رو تعریف کنید لاس فکشن های خودتون رو بنویسید که تو تن یه کوچولو باید بیشتر زحمت بکشید و یه دانش بیشتری از برنامه نویسی میخواد و حالا اون دیستلیشن
30
+
31
+ لاسش که دیگه تعریف می‌کنید و بیاد مثلاً همین فرمول من نوشتم دیگه یک منها از کراسنتروپی مثلاً ترولیبل بگیره آلفا تا از مثلاً تیچر بگیره ترین لوپاتونم اینجا فرق داره تفاوتش اینه که خب عکس ورودیتون رو میارید یک بار م��دیدش به یه مدل تیچر یک بار میدید به استودنت و دوتا پردیکشنش رو میارید میدید به لاس و خب این لوپاش فرق داره بقیش شبیه من اینجا رضا ۵۰ گذاشتم برای کلا فال نمیخوام ترین بشه و اف سیش عوض کردم فقط ۱۰ کلاسه بشه پس مجبوریم یه مقدار تیچر رو ترین کنیم چون فول کانکشن عوض کردیم و بعد حالا استودنت بیاریم تو کار و بقیه روند هم که عین همونه اینجا همونه دیگه ترین لوپ در واقع دیسپشن نالجشه
32
+
33
+ گرفتم دادم به لاس بک وارد کردم دقت‌هاشم که این یه مقدار طول میکشه ران بشه برای همین فایلشو در اختیارتون می‌ذارم و در واقع تو تمرینتونم اینطوری که صحبت شده قراره یه مدل خودتون بزنید روی دیتا ست حالا دیتا ستش یا ای ام نیسته دست خطه و یه مدل خودتون بزنید مدل بیارید انجام بدید یه قسمت همین باید دقتش مقایسه کنید و یه کوچولو تمرین سی ان ان رو نذارید روزهای آخر جی پی یو کم میاد کدداشونم که دادیم دیگه یه مقدار بخونید تغییرات لازمه رو خودتون بدید چون من همینطوری اینا رو زدم کد رو آوردم درست هست ولی بهترین نیست و یه کوچولو بازی کنید قیافه‌ها رو عوض کنید
34
+
35
+ که بتونی تمرینا رو انجام بدید حالا باز در مورد تمرین‌ها صحبت می‌کنم این فایل‌ها هم که میزارم من کلاس رو قطع می‌کنم حالا هر سوالی داشتید
36
+
data/Pytorch_Tutorial.ipynb ADDED
@@ -0,0 +1,1340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {
6
+ "id": "sDv-N0TTz0VE"
7
+ },
8
+ "source": [
9
+ "# What is Pytorch?\n",
10
+ "PyTorch is an open-source library used in machine learning library developed using Torch library for python program. It is developed by Facebook’s AI Research lab and released in January 2016 as a free and open-source library mainly used in computer vision, deep learning, and natural language processing applications. Programmer can build a complex neural network with ease using PyTorch as it has a core data structure, Tensor, multi-dimensional array like Numpy arrays. PyTorch use is increasing in current industries and in the research community as it is flexible, faster, easy to get the project up and running, due to which PyTorch is one of the top deep learning tools."
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "markdown",
15
+ "metadata": {
16
+ "id": "irVOTYdzyNJJ"
17
+ },
18
+ "source": [
19
+ "# How to install Pytorch\n",
20
+ "In order to install Pytorch, you could do it using different package managers such as `conda` and `pip`. Visit [this link](https://pytorch.org/get-started/locally/) for information about the installation on your device."
21
+ ]
22
+ },
23
+ {
24
+ "cell_type": "markdown",
25
+ "metadata": {
26
+ "id": "YLQylD11zw4t"
27
+ },
28
+ "source": [
29
+ "# Tensors\n",
30
+ "Tensors are a specialized data structure that are very similar to arrays and matrices. In PyTorch, we use tensors to encode the inputs and outputs of a model, as well as the model’s parameters. Tensors are just like Numpy arrays, except that they can run on GPUs and other hardware accelerators. Tensors are also optimized for automatic differentiation (which is referred to autograd from now on). Tensor API is really similar with Numpy array API, so if you are familiar with Numpy arrays, you are probably not going to face any problem with Tensors.\n"
31
+ ]
32
+ },
33
+ {
34
+ "cell_type": "code",
35
+ "execution_count": 18,
36
+ "metadata": {
37
+ "id": "FnosP4Qg1BuV"
38
+ },
39
+ "outputs": [],
40
+ "source": [
41
+ "# imporing packages\n",
42
+ "\n",
43
+ "import torch\n",
44
+ "import numpy as np"
45
+ ]
46
+ },
47
+ {
48
+ "cell_type": "markdown",
49
+ "metadata": {
50
+ "id": "wnoHqqlj1iGO"
51
+ },
52
+ "source": [
53
+ "## Initializing Tensors"
54
+ ]
55
+ },
56
+ {
57
+ "cell_type": "code",
58
+ "execution_count": 19,
59
+ "metadata": {
60
+ "colab": {
61
+ "base_uri": "https://localhost:8080/"
62
+ },
63
+ "id": "lDAnwOLG1hIu",
64
+ "outputId": "dd68a255-49d8-4b0d-af30-031e56b13611"
65
+ },
66
+ "outputs": [
67
+ {
68
+ "name": "stdout",
69
+ "output_type": "stream",
70
+ "text": [
71
+ "Tensor created directly from data: \n",
72
+ " tensor([[1, 2],\n",
73
+ " [3, 4]]) \n",
74
+ "\n",
75
+ "Tensor created from a numpy array: \n",
76
+ " tensor([[1, 2],\n",
77
+ " [3, 4]], dtype=torch.int32) \n",
78
+ " \n",
79
+ "Ones Tensor: \n",
80
+ " tensor([[1, 1],\n",
81
+ " [1, 1]]) \n",
82
+ "\n",
83
+ "Random Tensor: \n",
84
+ " tensor([[0.7931, 0.5523],\n",
85
+ " [0.8787, 0.1350]]) \n",
86
+ "\n",
87
+ "Random Tensor: \n",
88
+ " tensor([[0.3151, 0.8994, 0.6220],\n",
89
+ " [0.1558, 0.1749, 0.5404]]) \n",
90
+ "\n",
91
+ "Ones Tensor: \n",
92
+ " tensor([[1., 1., 1.],\n",
93
+ " [1., 1., 1.]]) \n",
94
+ "\n",
95
+ "Zeros Tensor: \n",
96
+ " tensor([[0., 0., 0.],\n",
97
+ " [0., 0., 0.]])\n"
98
+ ]
99
+ }
100
+ ],
101
+ "source": [
102
+ "# initializing directly from data\n",
103
+ "data = [[1, 2],[3, 4]]\n",
104
+ "x_data = torch.tensor(data)\n",
105
+ "print(f\"Tensor created directly from data: \\n {x_data} \\n\")\n",
106
+ "\n",
107
+ "# from numpy arrays\n",
108
+ "np_array = np.array(data)\n",
109
+ "x_np = torch.from_numpy(np_array)\n",
110
+ "print(f\"Tensor created from a numpy array: \\n {x_np} \\n \")\n",
111
+ "\n",
112
+ "# from another tensor\n",
113
+ "x_ones = torch.ones_like(x_data) # retains the properties of x_data\n",
114
+ "print(f\"Ones Tensor: \\n {x_ones} \\n\")\n",
115
+ "\n",
116
+ "x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data\n",
117
+ "print(f\"Random Tensor: \\n {x_rand} \\n\")\n",
118
+ "\n",
119
+ "shape = (2,3,)\n",
120
+ "rand_tensor = torch.rand(shape)\n",
121
+ "ones_tensor = torch.ones(shape)\n",
122
+ "zeros_tensor = torch.zeros(shape)\n",
123
+ "\n",
124
+ "print(f\"Random Tensor: \\n {rand_tensor} \\n\")\n",
125
+ "print(f\"Ones Tensor: \\n {ones_tensor} \\n\")\n",
126
+ "print(f\"Zeros Tensor: \\n {zeros_tensor}\")"
127
+ ]
128
+ },
129
+ {
130
+ "cell_type": "markdown",
131
+ "metadata": {
132
+ "id": "1pS6uApz4gie"
133
+ },
134
+ "source": [
135
+ "## Attributes of a Tensor"
136
+ ]
137
+ },
138
+ {
139
+ "cell_type": "code",
140
+ "execution_count": 20,
141
+ "metadata": {
142
+ "id": "udW5cVKlyIR7"
143
+ },
144
+ "outputs": [
145
+ {
146
+ "name": "stdout",
147
+ "output_type": "stream",
148
+ "text": [
149
+ "Shape of tensor: torch.Size([3, 4])\n",
150
+ "Datatype of tensor: torch.float32\n",
151
+ "Device tensor is stored on: cpu\n"
152
+ ]
153
+ }
154
+ ],
155
+ "source": [
156
+ "tensor = torch.rand(3,4)\n",
157
+ "\n",
158
+ "print(f\"Shape of tensor: {tensor.shape}\")\n",
159
+ "print(f\"Datatype of tensor: {tensor.dtype}\")\n",
160
+ "print(f\"Device tensor is stored on: {tensor.device}\")"
161
+ ]
162
+ },
163
+ {
164
+ "cell_type": "markdown",
165
+ "metadata": {
166
+ "id": "y39VfFN55e_4"
167
+ },
168
+ "source": [
169
+ "## Operations on Tensors\n",
170
+ "Torch Tensors contain various operations including arithmetic, linear algebra, matrix manipulation (transposing, indexing, slicing), etc.\n",
171
+ "\n",
172
+ "By default, tensors are created on CPU. In order to get the most out of tensors, we can move these tensors to GPU:"
173
+ ]
174
+ },
175
+ {
176
+ "cell_type": "code",
177
+ "execution_count": 21,
178
+ "metadata": {
179
+ "id": "Xu0Ltb464p14"
180
+ },
181
+ "outputs": [],
182
+ "source": [
183
+ "# We move our tensor to the GPU if available\n",
184
+ "if torch.cuda.is_available():\n",
185
+ " tensor = tensor.to(\"cuda\")"
186
+ ]
187
+ },
188
+ {
189
+ "cell_type": "code",
190
+ "execution_count": 22,
191
+ "metadata": {
192
+ "id": "Fd9ZbCgP6qcs"
193
+ },
194
+ "outputs": [
195
+ {
196
+ "name": "stdout",
197
+ "output_type": "stream",
198
+ "text": [
199
+ "First row: tensor([1., 1., 1., 1.])\n",
200
+ "First column: tensor([1., 1., 1., 1.])\n",
201
+ "Last column: tensor([1., 1., 1., 1.])\n",
202
+ "tensor([[1., 0., 1., 1.],\n",
203
+ " [1., 0., 1., 1.],\n",
204
+ " [1., 0., 1., 1.],\n",
205
+ " [1., 0., 1., 1.]])\n"
206
+ ]
207
+ }
208
+ ],
209
+ "source": [
210
+ "# Standard numpy-like indexing and slicing\n",
211
+ "tensor = torch.ones(4, 4)\n",
212
+ "print(f\"First row: {tensor[0]}\")\n",
213
+ "print(f\"First column: {tensor[:, 0]}\")\n",
214
+ "print(f\"Last column: {tensor[..., -1]}\")\n",
215
+ "tensor[:,1] = 0\n",
216
+ "print(tensor)"
217
+ ]
218
+ },
219
+ {
220
+ "cell_type": "code",
221
+ "execution_count": 23,
222
+ "metadata": {
223
+ "id": "ruFKbyCR6xfk"
224
+ },
225
+ "outputs": [
226
+ {
227
+ "name": "stdout",
228
+ "output_type": "stream",
229
+ "text": [
230
+ "tensor([[1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.],\n",
231
+ " [1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.],\n",
232
+ " [1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.],\n",
233
+ " [1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.]])\n"
234
+ ]
235
+ }
236
+ ],
237
+ "source": [
238
+ "# Joining tensors\n",
239
+ "t1 = torch.cat([tensor, tensor, tensor], dim=1)\n",
240
+ "print(t1)"
241
+ ]
242
+ },
243
+ {
244
+ "cell_type": "code",
245
+ "execution_count": 24,
246
+ "metadata": {},
247
+ "outputs": [
248
+ {
249
+ "data": {
250
+ "text/plain": [
251
+ "tensor([1., 1., 1., 1.])"
252
+ ]
253
+ },
254
+ "execution_count": 24,
255
+ "metadata": {},
256
+ "output_type": "execute_result"
257
+ }
258
+ ],
259
+ "source": [
260
+ "t2 = torch.ones((4,4,4))\n",
261
+ "t2[:,1,0]"
262
+ ]
263
+ },
264
+ {
265
+ "cell_type": "code",
266
+ "execution_count": 25,
267
+ "metadata": {
268
+ "id": "8MWGwqPI67RU"
269
+ },
270
+ "outputs": [
271
+ {
272
+ "name": "stdout",
273
+ "output_type": "stream",
274
+ "text": [
275
+ "Matrix Multiplication: \n",
276
+ " y1: tensor([[3., 3., 3., 3.],\n",
277
+ " [3., 3., 3., 3.],\n",
278
+ " [3., 3., 3., 3.],\n",
279
+ " [3., 3., 3., 3.]]) \n",
280
+ "\n",
281
+ " y2: tensor([[3., 3., 3., 3.],\n",
282
+ " [3., 3., 3., 3.],\n",
283
+ " [3., 3., 3., 3.],\n",
284
+ " [3., 3., 3., 3.]]) \n",
285
+ "\n",
286
+ " y3: tensor([[3., 3., 3., 3.],\n",
287
+ " [3., 3., 3., 3.],\n",
288
+ " [3., 3., 3., 3.],\n",
289
+ " [3., 3., 3., 3.]]) \n",
290
+ "\n",
291
+ "Element-wise Product: \n",
292
+ " z1: tensor([[1., 0., 1., 1.],\n",
293
+ " [1., 0., 1., 1.],\n",
294
+ " [1., 0., 1., 1.],\n",
295
+ " [1., 0., 1., 1.]]) \n",
296
+ "\n",
297
+ " z2: tensor([[1., 0., 1., 1.],\n",
298
+ " [1., 0., 1., 1.],\n",
299
+ " [1., 0., 1., 1.],\n",
300
+ " [1., 0., 1., 1.]]) \n",
301
+ "\n",
302
+ " z3: tensor([[1., 0., 1., 1.],\n",
303
+ " [1., 0., 1., 1.],\n",
304
+ " [1., 0., 1., 1.],\n",
305
+ " [1., 0., 1., 1.]])\n"
306
+ ]
307
+ }
308
+ ],
309
+ "source": [
310
+ "# Arithmatic operations\n",
311
+ "# This computes the matrix multiplication between two tensors. y1, y2, y3 will have the same value\n",
312
+ "y1 = tensor @ tensor.T\n",
313
+ "y2 = tensor.matmul(tensor.T)\n",
314
+ "\n",
315
+ "y3 = torch.rand_like(y1)\n",
316
+ "torch.matmul(tensor, tensor.T, out=y3)\n",
317
+ "\n",
318
+ "\n",
319
+ "# This computes the element-wise product. z1, z2, z3 will have the same value\n",
320
+ "z1 = tensor * tensor\n",
321
+ "z2 = tensor.mul(tensor)\n",
322
+ "\n",
323
+ "z3 = torch.rand_like(tensor)\n",
324
+ "torch.mul(tensor, tensor, out=z3)\n",
325
+ "\n",
326
+ "print(f\"Matrix Multiplication: \\n y1: {y1} \\n\\n y2: {y2} \\n\\n y3: {y3} \\n\")\n",
327
+ "print(f\"Element-wise Product: \\n z1: {z1} \\n\\n z2: {z2} \\n\\n z3: {z3}\")"
328
+ ]
329
+ },
330
+ {
331
+ "cell_type": "code",
332
+ "execution_count": 26,
333
+ "metadata": {
334
+ "id": "XZvbDzkM7ayG"
335
+ },
336
+ "outputs": [
337
+ {
338
+ "name": "stdout",
339
+ "output_type": "stream",
340
+ "text": [
341
+ "tensor(12.) <class 'torch.Tensor'>\n",
342
+ "12.0 <class 'float'>\n"
343
+ ]
344
+ }
345
+ ],
346
+ "source": [
347
+ "# Single-element tensors\n",
348
+ "agg = tensor.sum()\n",
349
+ "print(agg, type(agg))\n",
350
+ "agg_item = agg.item()\n",
351
+ "print(agg_item, type(agg_item))"
352
+ ]
353
+ },
354
+ {
355
+ "cell_type": "markdown",
356
+ "metadata": {},
357
+ "source": [
358
+ "# Datasets and Dataloaders\n",
359
+ "PyTorch provides two data primitives: `torch.utils.data.DataLoader` and `torch.utils.data.Dataset` that allow you to use pre-loaded datasets as well as your own data. `Dataset` stores the samples and their corresponding labels, and `DataLoader` wraps an iterable around the Dataset to enable easy access to the samples.\n",
360
+ "\n",
361
+ "Pytorch contains various pre-loaded subclasses of `Dataset` which you can load such as CIFAR10, MNIST, etc. Here is an example of loading MNIST test and train datasets."
362
+ ]
363
+ },
364
+ {
365
+ "cell_type": "code",
366
+ "execution_count": 27,
367
+ "metadata": {},
368
+ "outputs": [],
369
+ "source": [
370
+ "from torch.utils.data import Dataset\n",
371
+ "from torchvision import datasets\n",
372
+ "from torchvision.transforms import ToTensor\n",
373
+ "import matplotlib.pyplot as plt\n",
374
+ "\n",
375
+ "\n",
376
+ "training_data = datasets.MNIST(\n",
377
+ " root=\"data\", # the root directory to save the downloaded dataset\n",
378
+ " train=True, # choose whether it is test or train\n",
379
+ " download=True, # choose whether to download the dataset or not \n",
380
+ " transform=ToTensor() # what transforms should be applied to the dataset, in this case it just \n",
381
+ " # converts the images to torch.tensor\n",
382
+ ")\n",
383
+ "\n",
384
+ "test_data = datasets.MNIST(\n",
385
+ " root=\"data\",\n",
386
+ " train=False,\n",
387
+ " download=True,\n",
388
+ " transform=ToTensor()\n",
389
+ ")"
390
+ ]
391
+ },
392
+ {
393
+ "cell_type": "code",
394
+ "execution_count": 28,
395
+ "metadata": {},
396
+ "outputs": [
397
+ {
398
+ "name": "stdout",
399
+ "output_type": "stream",
400
+ "text": [
401
+ "Shape of the image of the first data: torch.Size([1, 28, 28])\n",
402
+ "Label of the first data: 5\n"
403
+ ]
404
+ },
405
+ {
406
+ "data": {
407
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGbCAYAAAAr/4yjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAPGElEQVR4nO3cfazX8//H8edHucjFN2pOjJ3IKS2SSOZa2GKYsvrDMoVlQ4YN4w81DDPXxshFuZq5KmYYE2FoyeVcLMmSlelCLo6LlPX+/uHnuW+Ln8/r43ROnW63zR8+ez/O511O3Xufo1etqqoqACAiNuvoGwBgwyEKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKbLS+/PLLqNVqccMNN7TZx3z11VejVqvFq6++2mYfEzYmokC7uv/++6NWq8U777zT0beywfj666/j1FNPjT333DO222672H777WPo0KHxwAMPhFNoaG9dO/oGYFO3fPnyWLRoUYwaNSqam5tj9erV8dJLL8W4cePis88+i2uuuaajb5FNiChAB9tnn33W+XLVhAkT4sQTT4zbbrstrrrqqujSpUvH3BybHF8+YoOzatWqmDhxYuy///7RvXv32GabbeKwww6LmTNn/u3m5ptvjt69e0e3bt3iiCOOiI8//nida+bOnRujRo2KHj16xFZbbRVDhgyJZ555Zn3+UP6V3XbbLX755ZdYtWpVR98KmxBPCmxwfvzxx7j33nvjlFNOifHjx0dra2vcd999MXz48Hj77bdj3333Xev6Bx98MFpbW+Pcc8+NlStXxq233hpHHXVUfPTRR9GrV6+IiPjkk0/ikEMOiV122SUuvfTS2GabbeLxxx+PESNGxLRp02LkyJFF97h69er44Ycf6rq2R48esdlm//znr19//TV+/vnn+Omnn+K1116LqVOnxkEHHRTdunUrujf4VypoR1OnTq0iopozZ87fXvP7779Xv/3221qvfffdd1WvXr2qM844I19bsGBBFRFVt27dqkWLFuXrs2fPriKiuvDCC/O1o48+uho4cGC1cuXKfG3NmjXVwQcfXPXt2zdfmzlzZhUR1cyZM//fH8ef19Xzz4IFC/7pp6Wqqqq69tpr19odffTR1VdffVXXFtqKJwU2OF26dMmvoa9Zsya+//77WLNmTQwZMiTee++9da4fMWJE7LLLLvnvQ4cOjQMPPDCef/75uOmmm2LFihXxyiuvxJVXXhmtra3R2tqa1w4fPjwmTZoUixcvXutj/JNBgwbFSy+9VNe1O+20U13XnXLKKTFkyJBYtmxZPPvss7FkyZL49ddf674naAuiwAbpgQceiBtvvDHmzp0bq1evztd33333da7t27fvOq/169cvHn/88YiImD9/flRVFZdffnlcfvnlf/l+S5cuLYrCDjvsEMccc0zd19ejd+/e0bt374j4IxBnnXVWHHPMMfHZZ5/5EhLtRhTY4Dz88MMxbty4GDFiRFx88cXR1NQUXbp0iWuvvTa++OKL4o+3Zs2aiIi46KKLYvjw4X95TUtLS9HHXLVqVaxYsaKua3fccceG/u+hUaNGxT333BOvv/763943tDVRYIPz5JNPRp8+fWL69OlRq9Xy9UmTJv3l9Z9//vk6r82bNy922223iIjo06dPRERsvvnmbfan+7feeiuGDRtW17ULFizIeynx55eO6v2GNrQFUWCD8+efqquqyijMnj07Zs2aFc3Nzetc//TTT6/1PYG33347Zs+eHRdccEFERDQ1NcWRRx4ZkydPjvPOOy923nnntfbLli2LHXfcsege2/J7Cn/3/vfdd1/UarXYb7/9iu4N/g1RoENMmTIlXnjhhXVeP//88+OEE06I6dOnx8iRI+P444+PBQsWxF133RUDBgyIn376aZ1NS0tLHHrooXH22WfHb7/9Frfcckv07NkzLrnkkrzmjjvuiEMPPTQGDhwY48ePjz59+sSSJUti1qxZsWjRovjwww+L7r8tv6dw9dVXx5tvvhnHHntsNDc3x4oVK2LatGkxZ86cOO+884q/tAX/hijQIe68886/fH3cuHExbty4+Oabb2Ly5Mnx4osvxoABA+Lhhx+OJ5544i8PqjvttNNis802i1tuuSWWLl0aQ4cOjdtvv32tJ4IBAwbEO++8E1dccUXcf//98e2330ZTU1MMHjw4Jk6cuL5+mHU5/vjj44svvogpU6bEsmXLYquttop99tknpk6dGmPHju3Qe2PTU6sqJ24B8AfHXACQRAGAJAoAJFEAIIkCAEkUAEh1/z2F/z1uAICNTz1/A8GTAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAUteOvgE2HXvssUdDu8suu6x4069fv+LNvHnzijdLly4t3tx9993Fm4iIL7/8sqEdlPCkAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAVKuqqqrrwlptfd8LHWTMmDHFmyOPPLJ4c/jhhxdvIiJaWloa2rWHRn5dLF68uKH3GjZsWPFm/vz5Db0XnVM9v917UgAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQHIgXiez6667Fm/ef//94k3Pnj2LN9OmTSveREQ89NBDxZvu3bsXb0aOHFm8GTx4cPGmubm5eBMRcfvttxdvzj///Ibei87JgXgAFBEFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYDUtaNvgLa17bbbFm969OixHu5kXQceeGBDu9GjR7fxnfy1Rg7eGzZsWPFmxowZxZuIiP/85z8N7aCEJwUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACA5JbWTWbhwYfHmzDPPXA93sq5PP/20Xd6nPZ1zzjnt9l5PPfVUu70Xmy5PCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASLWqqqq6LqzV1ve9wEanzl8+a/n4448beq+BAwc2tIM/1fP56kkBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgCpa0ffAPyTLbfcsnjT0tJSvLnmmmuKN8uWLSvejB07tngD7cWTAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkgPxaDfHHXdcQ7uJEycWb3baaafiTVVVxZumpqbiDWzIPCkAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgDJKamdzJZbblm8mTBhQvHm5JNPLt4ccMABxZuIiC5duhRvFi5cWLwZPXp08QY6G08KACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABItaqqqrourNXW973QBvr371+8+eSTT4o3jXw+1PmptlF56623ijdXXHFFQ+81Y8aMhnbwp3p+DXpSACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAciBeJ7P99tsXb0aOHFm86devX/Fm3rx5xZtGNfLzMGnSpOJN9+7dizeNHgzYyIF406dPL9488sgjxZsff/yxeEP7cyAeAEVEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgORAP/k9zc3O7bC677LLiTUTEUUcdVbzZYostijeNHLx30kknFW9WrlxZvOHfcSAeAEVEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgORAPNhJDhw4t3txzzz3Fm7333rt48+ijjxZvxowZU7zh33EgHgBFRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAMkpqdCJ9e/fv3gzZ86c4s0WW2xRvNlrr72KNxER8+fPb2iHU1IBKCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgCpa0ffALD+zJ07t3jzwQcfFG8OOeSQ4s2JJ55YvImIuPnmmxvaUR9PCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASA7Eg05s0KBBxZuWlpbiTWtra/Hmo48+Kt6w/nlSACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAciBeJ9O1a/l/0jFjxhRvHnvsseLNypUrized0Q477NDQbvjw4cWb66+/vnjT1NRUvHnllVeKNzNmzCjesP55UgAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQKpVVVXVdWGttr7vhTZw3XXXFW8uuuii4s3uu+9evPnqq6+KN43aa6+9ijctLS3Fm9NPP714M2zYsOJNRMS2225bvGltbS3eTJ48uXhzxx13FG/a8/OBP9Tz270nBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIDkltZP5/PPPizd9+vQp3qxYsaJ4U+enWpvo1q1b8Wbrrbcu3jTy62L58uXFm4iId999t3hz9dVXF2/eeOON4g0bB6ekAlBEFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkgPxOplBgwYVbyZMmFC8Oeyww4o3ffv2Ld5ERCxcuLB48/LLLxdvnnvuueLN0qVLizeLFy8u3kQ09vMA/8uBeAAUEQUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgORAPIBNhAPxACgiCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIAqWu9F1ZVtT7vA4ANgCcFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFANJ/AQmIi12V3zs8AAAAAElFTkSuQmCC",
408
+ "text/plain": [
409
+ "<Figure size 640x480 with 1 Axes>"
410
+ ]
411
+ },
412
+ "metadata": {},
413
+ "output_type": "display_data"
414
+ }
415
+ ],
416
+ "source": [
417
+ "# Choosing one data and visualizing it\n",
418
+ "print(f\"Shape of the image of the first data: {training_data[0][0].shape}\")\n",
419
+ "print(f\"Label of the first data: {training_data[0][1]}\")\n",
420
+ "\n",
421
+ "# Visualizing it\n",
422
+ "idx = np.random.randint(0,10000)\n",
423
+ "img, label = training_data[idx]\n",
424
+ "plt.title(f\"Label = {label}\")\n",
425
+ "plt.imshow(img.squeeze(), cmap=\"gray\")\n",
426
+ "plt.axis(False)\n",
427
+ "plt.show()"
428
+ ]
429
+ },
430
+ {
431
+ "cell_type": "markdown",
432
+ "metadata": {},
433
+ "source": [
434
+ "### Creating a Custom Dataset\n",
435
+ "Most of the time, you might now work with pre-loaded datasets (such as some of the questions of your homework:)). In these case you must create your own custom dataset. In order to do so you should create a child from the class `Dataset` as shown below:"
436
+ ]
437
+ },
438
+ {
439
+ "cell_type": "code",
440
+ "execution_count": 29,
441
+ "metadata": {},
442
+ "outputs": [
443
+ {
444
+ "name": "stderr",
445
+ "output_type": "stream",
446
+ "text": [
447
+ "C:\\Users\\ASUS\\AppData\\Local\\Temp\\ipykernel_18972\\1050226701.py:2: DeprecationWarning: \n",
448
+ "Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),\n",
449
+ "(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)\n",
450
+ "but was not found to be installed on your system.\n",
451
+ "If this would cause problems for you,\n",
452
+ "please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466\n",
453
+ " \n",
454
+ " import pandas as pd\n"
455
+ ]
456
+ }
457
+ ],
458
+ "source": [
459
+ "import os\n",
460
+ "import pandas as pd\n",
461
+ "from torchvision.io import read_image\n",
462
+ "\n",
463
+ "class CustomImageDataset(Dataset):\n",
464
+ " def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):\n",
465
+ " self.img_labels = pd.read_csv(annotations_file)\n",
466
+ " self.img_dir = img_dir\n",
467
+ " self.transform = transform\n",
468
+ " self.target_transform = target_transform\n",
469
+ "\n",
470
+ " def __len__(self):\n",
471
+ " return len(self.img_labels)\n",
472
+ "\n",
473
+ " def __getitem__(self, idx):\n",
474
+ " img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])\n",
475
+ " image = read_image(img_path)\n",
476
+ " label = self.img_labels.iloc[idx, 1]\n",
477
+ " if self.transform:\n",
478
+ " image = self.transform(image)\n",
479
+ " if self.target_transform:\n",
480
+ " label = self.target_transform(label)\n",
481
+ " return image, label"
482
+ ]
483
+ },
484
+ {
485
+ "cell_type": "markdown",
486
+ "metadata": {},
487
+ "source": [
488
+ "### Preparing your data for training with DataLoader\n",
489
+ "using `DataLoader`, you can shuffle data, created minibatches from it, and iterate through does minibatches just by one command:"
490
+ ]
491
+ },
492
+ {
493
+ "cell_type": "code",
494
+ "execution_count": 30,
495
+ "metadata": {},
496
+ "outputs": [],
497
+ "source": [
498
+ "from torch.utils.data import DataLoader\n",
499
+ "\n",
500
+ "train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)\n",
501
+ "test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)"
502
+ ]
503
+ },
504
+ {
505
+ "cell_type": "code",
506
+ "execution_count": 31,
507
+ "metadata": {},
508
+ "outputs": [
509
+ {
510
+ "name": "stdout",
511
+ "output_type": "stream",
512
+ "text": [
513
+ "First iter: \n",
514
+ " tensor([5, 1, 7, 1, 6, 3, 5, 4, 0, 3, 2, 2, 2, 7, 7, 3, 4, 8, 5, 0, 7, 9, 3, 1,\n",
515
+ " 7, 1, 4, 2, 2, 7, 4, 3, 1, 0, 2, 4, 9, 3, 8, 1, 5, 8, 7, 7, 7, 9, 7, 0,\n",
516
+ " 2, 3, 2, 6, 6, 8, 9, 0, 5, 4, 1, 6, 1, 4, 1, 8]) \n",
517
+ " \n",
518
+ "Second iter: \n",
519
+ " tensor([9, 1, 3, 3, 7, 0, 6, 1, 7, 9, 8, 6, 7, 3, 8, 1, 9, 4, 7, 5, 3, 7, 7, 1,\n",
520
+ " 9, 6, 8, 1, 5, 7, 4, 3, 8, 6, 8, 6, 3, 4, 6, 5, 5, 9, 3, 1, 2, 6, 7, 2,\n",
521
+ " 0, 2, 9, 7, 7, 2, 9, 8, 3, 0, 3, 9, 1, 9, 4, 2])\n",
522
+ "Features batch shape: \n",
523
+ " torch.Size([64, 1, 28, 28]) \n",
524
+ "\n",
525
+ "Labels batch shape: \n",
526
+ " torch.Size([64]) \n",
527
+ "\n"
528
+ ]
529
+ }
530
+ ],
531
+ "source": [
532
+ "# iterating on train_dataloader and printing just the labels in order to see the difference\n",
533
+ "first_batch = next(iter(train_dataloader))\n",
534
+ "second_batch = next(iter(train_dataloader))\n",
535
+ "print(f\"First iter: \\n {first_batch[1]} \\n \")\n",
536
+ "print(f\"Second iter: \\n {second_batch[1]}\")\n",
537
+ "\n",
538
+ "print(f\"Features batch shape: \\n {first_batch[0].shape} \\n\")\n",
539
+ "print(f\"Labels batch shape: \\n {first_batch[1].shape} \\n\")"
540
+ ]
541
+ },
542
+ {
543
+ "cell_type": "markdown",
544
+ "metadata": {},
545
+ "source": [
546
+ "# Transforms\n",
547
+ "Data does not always come in its final processed form that is required for training machine learning algorithms. We use transforms to perform some manipulation of the data and make it suitable for training.\n",
548
+ "\n",
549
+ "All TorchVision datasets have two parameters -`transform` to modify the features and `target_transform` to modify the labels - that accept callables containing the transformation logic. For more information about transform you can visit [torchvision.transform](https://pytorch.org/vision/stable/transforms.html).\n",
550
+ "\n",
551
+ "Here is an example of using transfomrs on `torchvision.datasets.MNIST`. MNIST datasets contains PIL images which should be converted tensors normalized between 0 to 1(using `ToTensor()`)and labels which are integers and should be converted to one-hot encoded values as shown below.\n",
552
+ "\n",
553
+ "In the example below, we also use `Lambda` transforms which apply any user-defined lambda function. "
554
+ ]
555
+ },
556
+ {
557
+ "cell_type": "code",
558
+ "execution_count": 32,
559
+ "metadata": {},
560
+ "outputs": [],
561
+ "source": [
562
+ "from torchvision.transforms import ToTensor, Lambda\n",
563
+ "ds = datasets.MNIST(\n",
564
+ " root=\"data\",\n",
565
+ " train=True,\n",
566
+ " download=True,\n",
567
+ " transform=ToTensor(),\n",
568
+ " target_transform = Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y),\n",
569
+ " value=1))\n",
570
+ ")"
571
+ ]
572
+ },
573
+ {
574
+ "cell_type": "code",
575
+ "execution_count": 33,
576
+ "metadata": {
577
+ "scrolled": true
578
+ },
579
+ "outputs": [
580
+ {
581
+ "name": "stdout",
582
+ "output_type": "stream",
583
+ "text": [
584
+ "Features tensor: \n",
585
+ " tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
586
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
587
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
588
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
589
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
590
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
591
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
592
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
593
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
594
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
595
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
596
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
597
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
598
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
599
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
600
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
601
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
602
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
603
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
604
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
605
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
606
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0118, 0.0706, 0.0706, 0.0706,\n",
607
+ " 0.4941, 0.5333, 0.6863, 0.1020, 0.6510, 1.0000, 0.9686, 0.4980,\n",
608
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
609
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
610
+ " 0.1176, 0.1412, 0.3686, 0.6039, 0.6667, 0.9922, 0.9922, 0.9922,\n",
611
+ " 0.9922, 0.9922, 0.8824, 0.6745, 0.9922, 0.9490, 0.7647, 0.2510,\n",
612
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
613
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1922,\n",
614
+ " 0.9333, 0.9922, 0.9922, 0.9922, 0.9922, 0.9922, 0.9922, 0.9922,\n",
615
+ " 0.9922, 0.9843, 0.3647, 0.3216, 0.3216, 0.2196, 0.1529, 0.0000,\n",
616
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
617
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706,\n",
618
+ " 0.8588, 0.9922, 0.9922, 0.9922, 0.9922, 0.9922, 0.7765, 0.7137,\n",
619
+ " 0.9686, 0.9451, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
620
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
621
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
622
+ " 0.3137, 0.6118, 0.4196, 0.9922, 0.9922, 0.8039, 0.0431, 0.0000,\n",
623
+ " 0.1686, 0.6039, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
624
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
625
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
626
+ " 0.0000, 0.0549, 0.0039, 0.6039, 0.9922, 0.3529, 0.0000, 0.0000,\n",
627
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
628
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
629
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
630
+ " 0.0000, 0.0000, 0.0000, 0.5451, 0.9922, 0.7451, 0.0078, 0.0000,\n",
631
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
632
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
633
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
634
+ " 0.0000, 0.0000, 0.0000, 0.0431, 0.7451, 0.9922, 0.2745, 0.0000,\n",
635
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
636
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
637
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
638
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.1373, 0.9451, 0.8824, 0.6275,\n",
639
+ " 0.4235, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
640
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
641
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
642
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3176, 0.9412, 0.9922,\n",
643
+ " 0.9922, 0.4667, 0.0980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
644
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
645
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
646
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1765, 0.7294,\n",
647
+ " 0.9922, 0.9922, 0.5882, 0.1059, 0.0000, 0.0000, 0.0000, 0.0000,\n",
648
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
649
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
650
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0627,\n",
651
+ " 0.3647, 0.9882, 0.9922, 0.7333, 0.0000, 0.0000, 0.0000, 0.0000,\n",
652
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
653
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
654
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
655
+ " 0.0000, 0.9765, 0.9922, 0.9765, 0.2510, 0.0000, 0.0000, 0.0000,\n",
656
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
657
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
658
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1804, 0.5098,\n",
659
+ " 0.7176, 0.9922, 0.9922, 0.8118, 0.0078, 0.0000, 0.0000, 0.0000,\n",
660
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
661
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
662
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.1529, 0.5804, 0.8980, 0.9922,\n",
663
+ " 0.9922, 0.9922, 0.9804, 0.7137, 0.0000, 0.0000, 0.0000, 0.0000,\n",
664
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
665
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
666
+ " 0.0000, 0.0000, 0.0941, 0.4471, 0.8667, 0.9922, 0.9922, 0.9922,\n",
667
+ " 0.9922, 0.7882, 0.3059, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
668
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
669
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
670
+ " 0.0902, 0.2588, 0.8353, 0.9922, 0.9922, 0.9922, 0.9922, 0.7765,\n",
671
+ " 0.3176, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
672
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
673
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.6706,\n",
674
+ " 0.8588, 0.9922, 0.9922, 0.9922, 0.9922, 0.7647, 0.3137, 0.0353,\n",
675
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
676
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
677
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.2157, 0.6745, 0.8863, 0.9922,\n",
678
+ " 0.9922, 0.9922, 0.9922, 0.9569, 0.5216, 0.0431, 0.0000, 0.0000,\n",
679
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
680
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
681
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.5333, 0.9922, 0.9922, 0.9922,\n",
682
+ " 0.8314, 0.5294, 0.5176, 0.0627, 0.0000, 0.0000, 0.0000, 0.0000,\n",
683
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
684
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
685
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
686
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
687
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
688
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
689
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
690
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
691
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
692
+ " 0.0000, 0.0000, 0.0000, 0.0000],\n",
693
+ " [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
694
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
695
+ " 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
696
+ " 0.0000, 0.0000, 0.0000, 0.0000]]]) \n",
697
+ "\n",
698
+ "Labels tensor: \n",
699
+ " tensor([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.])\n"
700
+ ]
701
+ }
702
+ ],
703
+ "source": [
704
+ "print(f\"Features tensor: \\n {ds[0][0]} \\n\")\n",
705
+ "print(f\"Labels tensor: \\n {ds[0][1]}\")"
706
+ ]
707
+ },
708
+ {
709
+ "cell_type": "markdown",
710
+ "metadata": {},
711
+ "source": [
712
+ "# Build the neural network"
713
+ ]
714
+ },
715
+ {
716
+ "cell_type": "markdown",
717
+ "metadata": {},
718
+ "source": [
719
+ "Neural networks comprise of layers/modules that perform operations on data. The `torch.nn` namespace provides all the building blocks you need to build your own neural network. Every module in PyTorch subclasses the `nn.Module`. A neural network is a module itself that consists of other modules (layers). This nested structure allows for building and managing complex architectures easily."
720
+ ]
721
+ },
722
+ {
723
+ "cell_type": "code",
724
+ "execution_count": 34,
725
+ "metadata": {},
726
+ "outputs": [
727
+ {
728
+ "name": "stdout",
729
+ "output_type": "stream",
730
+ "text": [
731
+ "Using cuda device\n"
732
+ ]
733
+ }
734
+ ],
735
+ "source": [
736
+ "import torch.nn as nn\n",
737
+ "\n",
738
+ "# setting the device to cuda if available\n",
739
+ "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
740
+ "print(f\"Using {device} device\")"
741
+ ]
742
+ },
743
+ {
744
+ "cell_type": "markdown",
745
+ "metadata": {},
746
+ "source": [
747
+ "## Define the class\n",
748
+ "We define our neural network by subclassing `nn.Module`, and initialize the neural network layers in `__init__`. Every `nn.Module` subclass implements the operations on input data in the `forward` method."
749
+ ]
750
+ },
751
+ {
752
+ "cell_type": "code",
753
+ "execution_count": 35,
754
+ "metadata": {},
755
+ "outputs": [],
756
+ "source": [
757
+ "class NeuralNetwork(nn.Module):\n",
758
+ " def __init__(self):\n",
759
+ " super(NeuralNetwork, self).__init__()\n",
760
+ " self.flatten = nn.Flatten()\n",
761
+ " self.linear_relu_stack = nn.Sequential(\n",
762
+ " nn.Linear(28*28, 512),\n",
763
+ " nn.ReLU(),\n",
764
+ " nn.Linear(512, 512),\n",
765
+ " nn.ReLU(),\n",
766
+ " nn.Linear(512, 10),\n",
767
+ " )\n",
768
+ "\n",
769
+ " def forward(self, x):\n",
770
+ " x = self.flatten(x)\n",
771
+ " logits = self.linear_relu_stack(x)\n",
772
+ " return logits\n",
773
+ " \n",
774
+ "class NeuralNetwork1(nn.Module):\n",
775
+ " def __init__(self):\n",
776
+ " super(NeuralNetwork, self).__init__()\n",
777
+ " self.flatten = nn.Flatten()\n",
778
+ " self.linear1 = nn.Linear(28*28, 512)\n",
779
+ " self.relu1 = nn.ReLU()\n",
780
+ " self.linear2 = nn.Linear(512, 512)\n",
781
+ " self.relu2 = nn.ReLU()\n",
782
+ " self.linear3 = nn.Linear(512, 10)\n",
783
+ "\n",
784
+ " def forward(self, x):\n",
785
+ " x = self.flatten(x)\n",
786
+ " x = self.linear1(x)\n",
787
+ " x = self.relu1(x)\n",
788
+ " x = self.linear2(x)\n",
789
+ " x = self.relu2(x)\n",
790
+ " logits = self.linear3(x)\n",
791
+ " return logits"
792
+ ]
793
+ },
794
+ {
795
+ "cell_type": "code",
796
+ "execution_count": 36,
797
+ "metadata": {},
798
+ "outputs": [
799
+ {
800
+ "name": "stdout",
801
+ "output_type": "stream",
802
+ "text": [
803
+ "NeuralNetwork(\n",
804
+ " (flatten): Flatten(start_dim=1, end_dim=-1)\n",
805
+ " (linear_relu_stack): Sequential(\n",
806
+ " (0): Linear(in_features=784, out_features=512, bias=True)\n",
807
+ " (1): ReLU()\n",
808
+ " (2): Linear(in_features=512, out_features=512, bias=True)\n",
809
+ " (3): ReLU()\n",
810
+ " (4): Linear(in_features=512, out_features=10, bias=True)\n",
811
+ " )\n",
812
+ ")\n"
813
+ ]
814
+ }
815
+ ],
816
+ "source": [
817
+ "# Creating an instance of the class `NeuralNetwork` and moving it to device\n",
818
+ "model = NeuralNetwork().to(device)\n",
819
+ "print(model)"
820
+ ]
821
+ },
822
+ {
823
+ "cell_type": "markdown",
824
+ "metadata": {},
825
+ "source": [
826
+ "whenever we want to get the model's output on an input data `X`, we pass the data to the model directly using `model(X)`. This automatically runs `forward` method with some other background calculations. **Do not run `model.forward()` directly.**\n",
827
+ "\n",
828
+ "Note that the device of the data passed to the model should be the same device in which the model is saved."
829
+ ]
830
+ },
831
+ {
832
+ "cell_type": "code",
833
+ "execution_count": 37,
834
+ "metadata": {},
835
+ "outputs": [
836
+ {
837
+ "name": "stdout",
838
+ "output_type": "stream",
839
+ "text": [
840
+ "Model's output: \n",
841
+ " tensor([[-0.0256, -0.0040, -0.0285, -0.0217, 0.0594, 0.0672, -0.0618, -0.0377,\n",
842
+ " -0.0170, -0.0272]], device='cuda:0', grad_fn=<AddmmBackward0>) \n",
843
+ "\n",
844
+ "Prediction probabilities: \n",
845
+ " tensor([[0.0983, 0.1005, 0.0981, 0.0987, 0.1071, 0.1079, 0.0948, 0.0972, 0.0992,\n",
846
+ " 0.0982]], device='cuda:0', grad_fn=<SoftmaxBackward0>) \n",
847
+ "\n",
848
+ "Predicted label: \n",
849
+ " 5 \n",
850
+ "\n"
851
+ ]
852
+ }
853
+ ],
854
+ "source": [
855
+ "X = torch.rand(1, 28, 28, device=device) # creating a random input with the same device\n",
856
+ "\n",
857
+ "# passing the input to the model\n",
858
+ "logits = model(X)\n",
859
+ "print(f\"Model's output: \\n {logits} \\n\")\n",
860
+ "\n",
861
+ "# calculating model predictions by applying a softmax\n",
862
+ "probs = nn.Softmax(dim=1)(logits) # finding the probabilities\n",
863
+ "print(f\"Prediction probabilities: \\n {probs} \\n\")\n",
864
+ "\n",
865
+ "y_pred = probs.argmax(dim = 1)\n",
866
+ "print(f\"Predicted label: \\n {y_pred.item()} \\n\")"
867
+ ]
868
+ },
869
+ {
870
+ "cell_type": "markdown",
871
+ "metadata": {},
872
+ "source": [
873
+ "Each Layer in the previous models works as explained below:\n",
874
+ "- `nn.Flatten()`: Flattens the data except for dim=0. For example a data with the shape of (1, 10, 10) is converted to a data with the shape of (1, 100)\n",
875
+ "- `nn.Linear(in_features, out_features)`: A single linear layer with `in_features` inputs and `out_features` outputs\n",
876
+ "- `nn.ReLU()`: Simply applies relu function on each element of its input\n",
877
+ "- `nn.Sequential(module1, module2, ...)`: It is a container of modules. It simply passes the data through the modules with the given order\n",
878
+ "- `nn.Softmax(dim)`: Applies a softmax function on the given dimension of the data"
879
+ ]
880
+ },
881
+ {
882
+ "cell_type": "markdown",
883
+ "metadata": {},
884
+ "source": [
885
+ "### Model Parameters\n",
886
+ "Many layers inside a neural network are parameterized, i.e. have associated weights and biases that are optimized during training. Subclassing `nn.Module` automatically tracks all fields defined inside your model object, and makes all parameters accessible using your model’s `parameters()` or `named_parameters()` methods."
887
+ ]
888
+ },
889
+ {
890
+ "cell_type": "code",
891
+ "execution_count": 38,
892
+ "metadata": {},
893
+ "outputs": [
894
+ {
895
+ "name": "stdout",
896
+ "output_type": "stream",
897
+ "text": [
898
+ "Model structure: NeuralNetwork(\n",
899
+ " (flatten): Flatten(start_dim=1, end_dim=-1)\n",
900
+ " (linear_relu_stack): Sequential(\n",
901
+ " (0): Linear(in_features=784, out_features=512, bias=True)\n",
902
+ " (1): ReLU()\n",
903
+ " (2): Linear(in_features=512, out_features=512, bias=True)\n",
904
+ " (3): ReLU()\n",
905
+ " (4): Linear(in_features=512, out_features=10, bias=True)\n",
906
+ " )\n",
907
+ ")\n",
908
+ "\n",
909
+ "\n",
910
+ "Layer: linear_relu_stack.0.weight | Size: torch.Size([512, 784]) | Values : tensor([[-0.0227, -0.0286, 0.0266, ..., 0.0331, 0.0057, -0.0345],\n",
911
+ " [-0.0298, 0.0025, -0.0354, ..., 0.0126, 0.0340, -0.0043]],\n",
912
+ " device='cuda:0', grad_fn=<SliceBackward0>) \n",
913
+ "\n",
914
+ "Layer: linear_relu_stack.0.bias | Size: torch.Size([512]) | Values : tensor([ 0.0288, -0.0333], device='cuda:0', grad_fn=<SliceBackward0>) \n",
915
+ "\n",
916
+ "Layer: linear_relu_stack.2.weight | Size: torch.Size([512, 512]) | Values : tensor([[ 0.0246, 0.0265, 0.0128, ..., -0.0425, 0.0385, -0.0296],\n",
917
+ " [-0.0200, 0.0194, 0.0015, ..., 0.0097, -0.0058, -0.0273]],\n",
918
+ " device='cuda:0', grad_fn=<SliceBackward0>) \n",
919
+ "\n",
920
+ "Layer: linear_relu_stack.2.bias | Size: torch.Size([512]) | Values : tensor([ 0.0084, -0.0268], device='cuda:0', grad_fn=<SliceBackward0>) \n",
921
+ "\n",
922
+ "Layer: linear_relu_stack.4.weight | Size: torch.Size([10, 512]) | Values : tensor([[ 4.0648e-02, -6.4324e-03, -1.7283e-02, ..., 1.1251e-02,\n",
923
+ " 3.5044e-02, -7.0807e-05],\n",
924
+ " [ 1.9634e-02, 3.4438e-03, -4.1713e-02, ..., -1.3394e-02,\n",
925
+ " -4.3820e-02, -4.2858e-03]], device='cuda:0', grad_fn=<SliceBackward0>) \n",
926
+ "\n",
927
+ "Layer: linear_relu_stack.4.bias | Size: torch.Size([10]) | Values : tensor([0.0323, 0.0086], device='cuda:0', grad_fn=<SliceBackward0>) \n",
928
+ "\n"
929
+ ]
930
+ }
931
+ ],
932
+ "source": [
933
+ "print(f\"Model structure: {model}\\n\\n\")\n",
934
+ "\n",
935
+ "for name, param in model.named_parameters():\n",
936
+ " print(f\"Layer: {name} | Size: {param.size()} | Values : {param[:2]} \\n\")"
937
+ ]
938
+ },
939
+ {
940
+ "cell_type": "markdown",
941
+ "metadata": {},
942
+ "source": [
943
+ "# Automatic Differentiation with `torch.autograd`\n",
944
+ "The most frequently used algorithm in neural networks is `back propagation`. One of the fundumental benefits of `Pytorch` and other deep learning frameworks is the implementation of automatic differetiaion using back propagation. This means that in order to find the gradients of a model, you can simply call `backward()` method and torch will automatically calculate the gradients of the pararmeters for you.\n",
945
+ "\n",
946
+ "For example, we try to calculate the gradients of a given function $y = exp(x^Tw)$ where $x \\in \\mathcal{R}^{10}$ is a constant vector and $w \\in \\mathcal{R}^{10}$ is our variable. Using back propagation, we can take $z = x^Tw$. Then $\\frac{d\\exp(z)}{dz} = \\exp(z)$, $\\frac{dz}{dw_i} = x_i$, and consequently $\\frac{dy}{dw_i} = \\frac{dy}{dz} \\frac{dz}{dw_i} = x_i . \\exp(x^Tw)= x_i . y $"
947
+ ]
948
+ },
949
+ {
950
+ "cell_type": "code",
951
+ "execution_count": 39,
952
+ "metadata": {},
953
+ "outputs": [
954
+ {
955
+ "name": "stdout",
956
+ "output_type": "stream",
957
+ "text": [
958
+ "Expected gradients: \n",
959
+ " tensor([ 3269017.2500, 6538034.5000, 9807052.0000, 13076069.0000,\n",
960
+ " 16345086.0000]) \n",
961
+ "\n",
962
+ "Calculated gradients: \n",
963
+ " tensor([ 3269017.2500, 6538034.5000, 9807052.0000, 13076069.0000,\n",
964
+ " 16345086.0000])\n"
965
+ ]
966
+ }
967
+ ],
968
+ "source": [
969
+ "x = torch.tensor([1.,2.,3.,4.,5.])\n",
970
+ "w = torch.tensor([1.,1.,1.,1.,1.], requires_grad=True)\n",
971
+ "z = torch.matmul(x,w)\n",
972
+ "y = torch.exp(z)\n",
973
+ "y.backward()\n",
974
+ "\n",
975
+ "\n",
976
+ "expected_grads = (y * x).detach() # setting requires_grad to False\n",
977
+ "\n",
978
+ "print(f\"Expected gradients: \\n {expected_grads} \\n\")\n",
979
+ "print(f\"Calculated gradients: \\n {w.grad}\")"
980
+ ]
981
+ },
982
+ {
983
+ "cell_type": "code",
984
+ "execution_count": 40,
985
+ "metadata": {},
986
+ "outputs": [
987
+ {
988
+ "name": "stdout",
989
+ "output_type": "stream",
990
+ "text": [
991
+ "First method's requires_grad before: True\n",
992
+ "First method's requires_grad after: False\n",
993
+ "\n",
994
+ "Second method's requires_grad before: True\n",
995
+ "Second method's requires_grad after: False\n"
996
+ ]
997
+ }
998
+ ],
999
+ "source": [
1000
+ "# how to set requires grad to False\n",
1001
+ "# there are two ways to do so\n",
1002
+ "# 1\n",
1003
+ "z1 = x * w\n",
1004
+ "print(\"First method's requires_grad before:\", z1.requires_grad)\n",
1005
+ "with torch.no_grad():\n",
1006
+ " z1 = x * w\n",
1007
+ "print(\"First method's requires_grad after:\", z1.requires_grad)\n",
1008
+ "\n",
1009
+ "# 2\n",
1010
+ "print()\n",
1011
+ "z2 = x * w\n",
1012
+ "print(\"Second method's requires_grad before:\", z2.requires_grad)\n",
1013
+ "\n",
1014
+ "z2 = z2.detach()\n",
1015
+ "print(\"Second method's requires_grad after:\", z2.requires_grad)\n"
1016
+ ]
1017
+ },
1018
+ {
1019
+ "cell_type": "markdown",
1020
+ "metadata": {},
1021
+ "source": [
1022
+ "# Optimization\n",
1023
+ "Now that we have the model, dataset and parameters, we should optimize our model on the given dataset."
1024
+ ]
1025
+ },
1026
+ {
1027
+ "cell_type": "code",
1028
+ "execution_count": 41,
1029
+ "metadata": {},
1030
+ "outputs": [
1031
+ {
1032
+ "data": {
1033
+ "text/plain": [
1034
+ "NeuralNetwork(\n",
1035
+ " (flatten): Flatten(start_dim=1, end_dim=-1)\n",
1036
+ " (linear_relu_stack): Sequential(\n",
1037
+ " (0): Linear(in_features=784, out_features=512, bias=True)\n",
1038
+ " (1): ReLU()\n",
1039
+ " (2): Linear(in_features=512, out_features=512, bias=True)\n",
1040
+ " (3): ReLU()\n",
1041
+ " (4): Linear(in_features=512, out_features=10, bias=True)\n",
1042
+ " )\n",
1043
+ ")"
1044
+ ]
1045
+ },
1046
+ "execution_count": 41,
1047
+ "metadata": {},
1048
+ "output_type": "execute_result"
1049
+ }
1050
+ ],
1051
+ "source": [
1052
+ "# creating an instance of our model\n",
1053
+ "model = NeuralNetwork().to(device)\n",
1054
+ "\n",
1055
+ "# setting models mode to train mode\n",
1056
+ "model.train()"
1057
+ ]
1058
+ },
1059
+ {
1060
+ "cell_type": "markdown",
1061
+ "metadata": {},
1062
+ "source": [
1063
+ "## Hyperparameters\n",
1064
+ "We define the following hyperparameters for training:\n",
1065
+ "- **Number of Epochs** - the number times to iterate over the dataset\n",
1066
+ "- **Batch Size** - the number of data samples propagated through the network before the parameters are updated\n",
1067
+ "- **Learning Rate** - how much to update models parameters at each batch/epoch. Smaller values yield slow learning speed, while large values may result in unpredictable behavior during training.\n",
1068
+ "\n"
1069
+ ]
1070
+ },
1071
+ {
1072
+ "cell_type": "code",
1073
+ "execution_count": 42,
1074
+ "metadata": {},
1075
+ "outputs": [],
1076
+ "source": [
1077
+ "learning_rate = 1e-3\n",
1078
+ "batch_size = 64\n",
1079
+ "epochs = 5"
1080
+ ]
1081
+ },
1082
+ {
1083
+ "cell_type": "markdown",
1084
+ "metadata": {},
1085
+ "source": [
1086
+ "## Optimization loop\n",
1087
+ "Each iteration of the optimization loop is called **epoch**. In each epoch these two main parts should be implemented:\n",
1088
+ "- **The Train Loop** - Iterate over the batches and try to converge to optimal parameters\n",
1089
+ "- **The Validation/Test Loop** - Iterate over test/validation dataset to see whether the model is improving or not\n",
1090
+ "\n",
1091
+ "We also need a loss function. There are various loss functions implemented in `torch.nn`. In this example, we use cross entropy."
1092
+ ]
1093
+ },
1094
+ {
1095
+ "cell_type": "code",
1096
+ "execution_count": 43,
1097
+ "metadata": {},
1098
+ "outputs": [],
1099
+ "source": [
1100
+ "# Initialize the loss function\n",
1101
+ "loss_fn = nn.CrossEntropyLoss()"
1102
+ ]
1103
+ },
1104
+ {
1105
+ "cell_type": "markdown",
1106
+ "metadata": {},
1107
+ "source": [
1108
+ "We also have to add an optimizer to the loop. The objective of an optimizer is to use the gradien of the parameters and optimize them based on the selected optimization algorithm such as SGD, Adam, etc."
1109
+ ]
1110
+ },
1111
+ {
1112
+ "cell_type": "code",
1113
+ "execution_count": 44,
1114
+ "metadata": {},
1115
+ "outputs": [],
1116
+ "source": [
1117
+ "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)"
1118
+ ]
1119
+ },
1120
+ {
1121
+ "cell_type": "markdown",
1122
+ "metadata": {},
1123
+ "source": [
1124
+ "Inside the training loop for each batch, we first call `optimizer.zero_grad()` to make all gradients equal to zero. Then we call `loss.backward()` to calculate the gradients (using the autograd which was explained before), and finally, we call `optimizer.step()` to adjust the parameters based on their gradients.\n",
1125
+ "\n",
1126
+ "The final implementation of an optimization loop should be something like this:"
1127
+ ]
1128
+ },
1129
+ {
1130
+ "cell_type": "code",
1131
+ "execution_count": 45,
1132
+ "metadata": {},
1133
+ "outputs": [],
1134
+ "source": [
1135
+ "def train_loop(dataloader, model, loss_fn, optimizer):\n",
1136
+ " size = len(dataloader.dataset)\n",
1137
+ " for batch, (X, y) in enumerate(dataloader):\n",
1138
+ " # Compute prediction and loss\n",
1139
+ " pred = model(X)\n",
1140
+ " loss = loss_fn(pred, y)\n",
1141
+ "\n",
1142
+ " # Backpropagation\n",
1143
+ " optimizer.zero_grad()\n",
1144
+ " loss.backward()\n",
1145
+ " optimizer.step()\n",
1146
+ "\n",
1147
+ " if batch % 100 == 0:\n",
1148
+ " loss, current = loss.item(), batch * len(X)\n",
1149
+ " print(f\"loss: {loss:>7f} [{current:>5d}/{size:>5d}]\")\n",
1150
+ "\n",
1151
+ "\n",
1152
+ "def test_loop(dataloader, model, loss_fn):\n",
1153
+ " size = len(dataloader.dataset)\n",
1154
+ " num_batches = len(dataloader)\n",
1155
+ " test_loss, correct = 0, 0\n",
1156
+ "\n",
1157
+ " with torch.no_grad():\n",
1158
+ " for X, y in dataloader:\n",
1159
+ " pred = model(X)\n",
1160
+ " test_loss += loss_fn(pred, y).item()\n",
1161
+ " correct += (pred.argmax(1) == y).type(torch.float).sum().item()\n",
1162
+ "\n",
1163
+ " test_loss /= num_batches\n",
1164
+ " correct /= size\n",
1165
+ " print(f\"Test Error: \\n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \\n\")"
1166
+ ]
1167
+ },
1168
+ {
1169
+ "cell_type": "code",
1170
+ "execution_count": 46,
1171
+ "metadata": {
1172
+ "scrolled": false
1173
+ },
1174
+ "outputs": [
1175
+ {
1176
+ "name": "stdout",
1177
+ "output_type": "stream",
1178
+ "text": [
1179
+ "Epoch 1\n",
1180
+ "-------------------------------\n"
1181
+ ]
1182
+ },
1183
+ {
1184
+ "ename": "RuntimeError",
1185
+ "evalue": "Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! (when checking argument for argument mat1 in method wrapper_CUDA_addmm)",
1186
+ "output_type": "error",
1187
+ "traceback": [
1188
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1189
+ "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)",
1190
+ "\u001b[1;32me:\\Sharif University\\Sharif Courses\\TA Files\\Social Robotics TA\\Pytorch_Tutorial.ipynb Cell 51\u001b[0m line \u001b[0;36m7\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=4'>5</a>\u001b[0m \u001b[39mfor\u001b[39;00m t \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m(epochs):\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=5'>6</a>\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mEpoch \u001b[39m\u001b[39m{\u001b[39;00mt\u001b[39m+\u001b[39m\u001b[39m1\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m\\n\u001b[39;00m\u001b[39m-------------------------------\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m----> <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=6'>7</a>\u001b[0m train_loop(train_dataloader, model, loss_fn, optimizer)\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=7'>8</a>\u001b[0m test_loop(test_dataloader, model, loss_fn)\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=8'>9</a>\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mDone!\u001b[39m\u001b[39m\"\u001b[39m)\n",
1191
+ "\u001b[1;32me:\\Sharif University\\Sharif Courses\\TA Files\\Social Robotics TA\\Pytorch_Tutorial.ipynb Cell 51\u001b[0m line \u001b[0;36m5\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m size \u001b[39m=\u001b[39m \u001b[39mlen\u001b[39m(dataloader\u001b[39m.\u001b[39mdataset)\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m \u001b[39mfor\u001b[39;00m batch, (X, y) \u001b[39min\u001b[39;00m \u001b[39menumerate\u001b[39m(dataloader):\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=3'>4</a>\u001b[0m \u001b[39m# Compute prediction and loss\u001b[39;00m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=4'>5</a>\u001b[0m pred \u001b[39m=\u001b[39m model(X)\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=5'>6</a>\u001b[0m loss \u001b[39m=\u001b[39m loss_fn(pred, y)\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=7'>8</a>\u001b[0m \u001b[39m# Backpropagation\u001b[39;00m\n",
1192
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1516\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_compiled_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs) \u001b[39m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1517\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m-> 1518\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n",
1193
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1522\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1523\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1524\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1525\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1526\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1527\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 1529\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m 1530\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n",
1194
+ "\u001b[1;32me:\\Sharif University\\Sharif Courses\\TA Files\\Social Robotics TA\\Pytorch_Tutorial.ipynb Cell 51\u001b[0m line \u001b[0;36m1\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=12'>13</a>\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, x):\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=13'>14</a>\u001b[0m x \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mflatten(x)\n\u001b[1;32m---> <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m logits \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mlinear_relu_stack(x)\n\u001b[0;32m <a href='vscode-notebook-cell:/e%3A/Sharif%20University/Sharif%20Courses/TA%20Files/Social%20Robotics%20TA/Pytorch_Tutorial.ipynb#Y101sZmlsZQ%3D%3D?line=15'>16</a>\u001b[0m \u001b[39mreturn\u001b[39;00m logits\n",
1195
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1516\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_compiled_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs) \u001b[39m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1517\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m-> 1518\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n",
1196
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1522\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1523\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1524\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1525\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1526\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1527\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 1529\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m 1530\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n",
1197
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\container.py:215\u001b[0m, in \u001b[0;36mSequential.forward\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m 213\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39minput\u001b[39m):\n\u001b[0;32m 214\u001b[0m \u001b[39mfor\u001b[39;00m module \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m:\n\u001b[1;32m--> 215\u001b[0m \u001b[39minput\u001b[39m \u001b[39m=\u001b[39m module(\u001b[39minput\u001b[39;49m)\n\u001b[0;32m 216\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39minput\u001b[39m\n",
1198
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1516\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_compiled_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs) \u001b[39m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1517\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m-> 1518\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_call_impl(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n",
1199
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1522\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1523\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1524\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1525\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1526\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1527\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 1529\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m 1530\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n",
1200
+ "File \u001b[1;32mc:\\Users\\ASUS\\.conda\\envs\\torch\\lib\\site-packages\\torch\\nn\\modules\\linear.py:114\u001b[0m, in \u001b[0;36mLinear.forward\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m 113\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39minput\u001b[39m: Tensor) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Tensor:\n\u001b[1;32m--> 114\u001b[0m \u001b[39mreturn\u001b[39;00m F\u001b[39m.\u001b[39;49mlinear(\u001b[39minput\u001b[39;49m, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mweight, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mbias)\n",
1201
+ "\u001b[1;31mRuntimeError\u001b[0m: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! (when checking argument for argument mat1 in method wrapper_CUDA_addmm)"
1202
+ ]
1203
+ }
1204
+ ],
1205
+ "source": [
1206
+ "loss_fn = nn.CrossEntropyLoss()\n",
1207
+ "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n",
1208
+ "\n",
1209
+ "epochs = 4\n",
1210
+ "for t in range(epochs):\n",
1211
+ " print(f\"Epoch {t+1}\\n-------------------------------\")\n",
1212
+ " train_loop(train_dataloader, model, loss_fn, optimizer)\n",
1213
+ " test_loop(test_dataloader, model, loss_fn)\n",
1214
+ "print(\"Done!\")"
1215
+ ]
1216
+ },
1217
+ {
1218
+ "cell_type": "markdown",
1219
+ "metadata": {},
1220
+ "source": [
1221
+ "# Saving and loading the model\n",
1222
+ "After training the model, we should save it to be able to use it afterwards. There are two ways to do this:\n",
1223
+ "- Saving just the weights of the model\n",
1224
+ "- Saving the weights and the structure "
1225
+ ]
1226
+ },
1227
+ {
1228
+ "cell_type": "markdown",
1229
+ "metadata": {},
1230
+ "source": [
1231
+ "### Saving & Loading the weigths"
1232
+ ]
1233
+ },
1234
+ {
1235
+ "cell_type": "code",
1236
+ "execution_count": 30,
1237
+ "metadata": {},
1238
+ "outputs": [
1239
+ {
1240
+ "data": {
1241
+ "text/plain": [
1242
+ "NeuralNetwork(\n",
1243
+ " (flatten): Flatten(start_dim=1, end_dim=-1)\n",
1244
+ " (linear_relu_stack): Sequential(\n",
1245
+ " (0): Linear(in_features=784, out_features=512, bias=True)\n",
1246
+ " (1): ReLU()\n",
1247
+ " (2): Linear(in_features=512, out_features=512, bias=True)\n",
1248
+ " (3): ReLU()\n",
1249
+ " (4): Linear(in_features=512, out_features=10, bias=True)\n",
1250
+ " )\n",
1251
+ ")"
1252
+ ]
1253
+ },
1254
+ "execution_count": 30,
1255
+ "metadata": {},
1256
+ "output_type": "execute_result"
1257
+ }
1258
+ ],
1259
+ "source": [
1260
+ "# saving\n",
1261
+ "torch.save(model.state_dict(), 'model_weights.pth')\n",
1262
+ "\n",
1263
+ "# loading\n",
1264
+ "model.load_state_dict(torch.load('model_weights.pth'))\n",
1265
+ "model.eval()"
1266
+ ]
1267
+ },
1268
+ {
1269
+ "cell_type": "markdown",
1270
+ "metadata": {},
1271
+ "source": [
1272
+ "### Saving & Loading the model and its weigths"
1273
+ ]
1274
+ },
1275
+ {
1276
+ "cell_type": "code",
1277
+ "execution_count": 31,
1278
+ "metadata": {},
1279
+ "outputs": [
1280
+ {
1281
+ "data": {
1282
+ "text/plain": [
1283
+ "NeuralNetwork(\n",
1284
+ " (flatten): Flatten(start_dim=1, end_dim=-1)\n",
1285
+ " (linear_relu_stack): Sequential(\n",
1286
+ " (0): Linear(in_features=784, out_features=512, bias=True)\n",
1287
+ " (1): ReLU()\n",
1288
+ " (2): Linear(in_features=512, out_features=512, bias=True)\n",
1289
+ " (3): ReLU()\n",
1290
+ " (4): Linear(in_features=512, out_features=10, bias=True)\n",
1291
+ " )\n",
1292
+ ")"
1293
+ ]
1294
+ },
1295
+ "execution_count": 31,
1296
+ "metadata": {},
1297
+ "output_type": "execute_result"
1298
+ }
1299
+ ],
1300
+ "source": [
1301
+ "# saving\n",
1302
+ "torch.save(model, 'model.pth')\n",
1303
+ "\n",
1304
+ "# loading\n",
1305
+ "model = torch.load('model.pth')\n",
1306
+ "model.eval()"
1307
+ ]
1308
+ }
1309
+ ],
1310
+ "metadata": {
1311
+ "colab": {
1312
+ "collapsed_sections": [],
1313
+ "provenance": []
1314
+ },
1315
+ "kernelspec": {
1316
+ "display_name": "Python 3.9.13 ('base')",
1317
+ "language": "python",
1318
+ "name": "python3"
1319
+ },
1320
+ "language_info": {
1321
+ "codemirror_mode": {
1322
+ "name": "ipython",
1323
+ "version": 3
1324
+ },
1325
+ "file_extension": ".py",
1326
+ "mimetype": "text/x-python",
1327
+ "name": "python",
1328
+ "nbconvert_exporter": "python",
1329
+ "pygments_lexer": "ipython3",
1330
+ "version": "3.9.18"
1331
+ },
1332
+ "vscode": {
1333
+ "interpreter": {
1334
+ "hash": "304d98a18a6597b5074573a35a99b631fbbf66bbb48b57fc984d20c778d1912e"
1335
+ }
1336
+ }
1337
+ },
1338
+ "nbformat": 4,
1339
+ "nbformat_minor": 1
1340
+ }
data/Pytorch_Tutorial_SCR.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
data/SCR_Chapter00_course_outline.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3e09dbd1064ca0396b34c6d3b3523892c7dbae9b684c8aba2272fa09bce99f43
3
+ size 3777973
data/SCR_Chapter01_Introduction.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:df721627d2a237396ae46238f57de19778ed830714d44cba2c16a1d0222a37b2
3
+ size 4110254
data/SCR_Chapter02_DesignandInteraction.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:24d0b439db819daa55017fa477880a918f786daf1b1d6fce7f25e43ff4aa677b
3
+ size 4674528
data/SCR_Chapter03_ContinualLearning.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1e83e1a92830dc1dbfdef3b4105db26b52fd22413bc0b799dc0d18ee161a4019
3
+ size 2052908
data/SCR_Chapter03_MachineLearning_Part01_MLP.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:742bfaa5abd5420737834a16f69a4c5e18cf4a4e3aaae3bc35839a637e9f49ca
3
+ size 9944180
data/SCR_Chapter03_MachineLearning_Part02_CNN.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ea02b2ba3630d5b3d47165800a04b6faaa81b5f916c8e587d6a183f6cad39fee
3
+ size 16154602
data/SCR_Chapter03_MachineLearning_Part03_RNN.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9241f98124f2991cf90efd39b8b575f21d9336698c9bcd5f66422d5425af2fc7
3
+ size 14301980
data/SCR_Chapter04_DesignHRI.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:93bdd9bac4f6e72367bbeaad217b3fef850e10dcc88939e5c4ec0650bd2a67c1
3
+ size 10178898
data/SCR_ContinualLearning(EWC).ipynb ADDED
@@ -0,0 +1,316 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "metadata": {
7
+ "id": "bD0MZfilv6Cc"
8
+ },
9
+ "outputs": [],
10
+ "source": [
11
+ "import numpy as np\n",
12
+ "def task_seperate(x,y):\n",
13
+ "\n",
14
+ " indx0 = np.where(y==0)[0]\n",
15
+ " y0 = y[indx0]\n",
16
+ " x0 = x[indx0,:,:,:]\n",
17
+ "\n",
18
+ " indx1 = np.where(y==1)[0]\n",
19
+ " y1 = y[indx1]\n",
20
+ " x1 = x[indx1,:,:,:]\n",
21
+ "\n",
22
+ " indx2 = np.where(y==2)[0]\n",
23
+ " y2 = y[indx2]\n",
24
+ " x2 = x[indx2,:,:,:]\n",
25
+ "\n",
26
+ " indx3 = np.where(y==3)[0]\n",
27
+ " y3 = y[indx3]\n",
28
+ " x3 = x[indx3,:,:,:]\n",
29
+ "\n",
30
+ " indx4 = np.where(y==4)[0]\n",
31
+ " y4 = y[indx4]\n",
32
+ " x4 = x[indx4,:,:,:]\n",
33
+ "\n",
34
+ " indx5 = np.where(y==5)[0]\n",
35
+ " y5 = y[indx5]\n",
36
+ " x5 = x[indx5,:,:,:]\n",
37
+ "\n",
38
+ " y_task1 = np.concatenate((y0,y1),axis=0)\n",
39
+ " x_task1 = np.concatenate((x0,x1),axis=0)\n",
40
+ "\n",
41
+ " y_task2 = np.concatenate((y2,y3),axis=0)\n",
42
+ " x_task2 = np.concatenate((x2,x3),axis=0)\n",
43
+ "\n",
44
+ " y_task3 = np.concatenate((y4,y5),axis=0)\n",
45
+ " x_task3 = np.concatenate((x4,x5),axis=0)\n",
46
+ "\n",
47
+ " Y = [y_task1, y_task2, y_task3]\n",
48
+ " X = [x_task1, x_task2, x_task3]\n",
49
+ "\n",
50
+ " return X,Y"
51
+ ]
52
+ },
53
+ {
54
+ "cell_type": "code",
55
+ "execution_count": null,
56
+ "metadata": {
57
+ "id": "Q2qu1tupEhIf"
58
+ },
59
+ "outputs": [],
60
+ "source": [
61
+ "def compile_model(model, learning_rate, extra_losses=None):\n",
62
+ " def custom_loss(y_true, y_pred):\n",
63
+ " loss = keras.losses.sparse_categorical_crossentropy(y_true, y_pred)\n",
64
+ " if extra_losses is not None:\n",
65
+ " for fn in extra_losses:\n",
66
+ " loss += fn(model)\n",
67
+ "\n",
68
+ " return loss\n",
69
+ "\n",
70
+ " model.compile(\n",
71
+ " loss=custom_loss,\n",
72
+ " optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n",
73
+ " metrics=[\"accuracy\"]\n",
74
+ " )\n",
75
+ "\n",
76
+ "def report(model, epoch, validation_datasets, batch_size):\n",
77
+ " result = []\n",
78
+ " for inputs, labels in validation_datasets:\n",
79
+ " _, accuracy = model.evaluate(inputs, labels, verbose=0,\n",
80
+ " batch_size=batch_size)\n",
81
+ " result.append(\"{:.2f}\".format(accuracy * 100))\n",
82
+ "\n",
83
+ " # Add 1: assuming that we report after training has finished for this epoch.\n",
84
+ " print(epoch + 1, \"\\t\", \"\\t\".join(result))\n",
85
+ "\n",
86
+ "def train_epoch(model, train_data, batch_size,\n",
87
+ " gradient_mask=None, incdet_threshold=None):\n",
88
+ " \"\"\"Need a custom training loop for when we modify the gradients.\"\"\"\n",
89
+ " dataset = tf.data.Dataset.from_tensor_slices(train_data)\n",
90
+ " dataset = dataset.shuffle(len(train_data[0])).batch(batch_size)\n",
91
+ "\n",
92
+ " for inputs, labels in dataset:\n",
93
+ " with tf.GradientTape() as tape:\n",
94
+ " outputs = model(inputs)\n",
95
+ " loss = model.compiled_loss(labels, outputs)\n",
96
+ "\n",
97
+ " gradients = tape.gradient(loss, model.trainable_weights)\n",
98
+ "\n",
99
+ " model.optimizer.apply_gradients(zip(gradients, model.trainable_weights))\n"
100
+ ]
101
+ },
102
+ {
103
+ "cell_type": "code",
104
+ "execution_count": null,
105
+ "metadata": {
106
+ "id": "3GlD4yJOvr9n"
107
+ },
108
+ "outputs": [],
109
+ "source": [
110
+ "def fisher_matrix(model, dataset, samples):\n",
111
+ " \"\"\"\n",
112
+ " Compute the Fisher matrix, representing the importance of each weight in the\n",
113
+ " model. This is approximated using the variance of the gradient of each\n",
114
+ " weight, for some number of samples from the dataset.\n",
115
+ "\n",
116
+ " :param model: Model whose Fisher matrix is to be computed.\n",
117
+ " :param dataset: Dataset which the model has been trained on, but which will\n",
118
+ " not be seen in the future. Formatted as (inputs, labels).\n",
119
+ " :param samples: Number of samples to take from the dataset. More samples\n",
120
+ " gives a better approximation of the true variance.\n",
121
+ " :return: The main diagonal of the Fisher matrix, shaped to match the weights\n",
122
+ " returned by `model.trainable_weights`.\n",
123
+ " \"\"\"\n",
124
+ " inputs, labels = dataset\n",
125
+ " weights = model.trainable_weights\n",
126
+ " variance = [tf.zeros_like(tensor) for tensor in weights]\n",
127
+ "\n",
128
+ " for _ in range(samples):\n",
129
+ " # Select a random element from the dataset.\n",
130
+ " index = np.random.randint(len(inputs))\n",
131
+ " data = inputs[index]\n",
132
+ "\n",
133
+ " # When extracting from the array we lost a dimension so put it back.\n",
134
+ " data = tf.expand_dims(data, axis=0)\n",
135
+ "\n",
136
+ " # Collect gradients.\n",
137
+ " with tf.GradientTape() as tape:\n",
138
+ " output = model(data)\n",
139
+ " log_likelihood = tf.math.log(output)\n",
140
+ "\n",
141
+ " gradients = tape.gradient(log_likelihood, weights)\n",
142
+ "\n",
143
+ " # If the model has converged, we can assume that the current weights\n",
144
+ " # are the mean, and each gradient we see is a deviation. The variance is\n",
145
+ " # the average of the square of this deviation.\n",
146
+ " variance = [var + (grad ** 2) for var, grad in zip(variance, gradients)]\n",
147
+ "\n",
148
+ " fisher_diagonal = [tensor / samples for tensor in variance]\n",
149
+ " return fisher_diagonal\n",
150
+ "\n",
151
+ "\n",
152
+ "def ewc_loss(lam, model, dataset, samples):\n",
153
+ " \"\"\"\n",
154
+ " Generate a loss function which will penalise divergence from the current\n",
155
+ " state. It is assumed that the model achieves good accuracy on `dataset`,\n",
156
+ " and we want to preserve this behaviour.\n",
157
+ "\n",
158
+ " The penalty is scaled according to how important each weight is for the\n",
159
+ " given dataset, and `lam` (lambda) applies equally to all weights.\n",
160
+ "\n",
161
+ " :param lam: Weight of this cost function compared to the other losses.\n",
162
+ " :param model: Model optimised for the given dataset.\n",
163
+ " :param dataset: NumPy arrays (inputs, labels).\n",
164
+ " :param samples: Number of samples of dataset to take when estimating\n",
165
+ " importance of weights. More samples improves estimates.\n",
166
+ " :return: A loss function.\n",
167
+ " \"\"\"\n",
168
+ " optimal_weights = deepcopy(model.trainable_weights)\n",
169
+ " fisher_diagonal = fisher_matrix(model, dataset, samples)\n",
170
+ "\n",
171
+ " def loss_fn(new_model):\n",
172
+ " # We're computing:\n",
173
+ " # sum [(lambda / 2) * F * (current weights - optimal weights)^2]\n",
174
+ " loss = 0\n",
175
+ " current = new_model.trainable_weights\n",
176
+ " for f, c, o in zip(fisher_diagonal, current, optimal_weights):\n",
177
+ " loss += tf.reduce_sum(f * ((c - o) ** 2))\n",
178
+ "\n",
179
+ " return loss * (lam / 2)\n",
180
+ "\n",
181
+ " return loss_fn\n"
182
+ ]
183
+ },
184
+ {
185
+ "cell_type": "code",
186
+ "execution_count": null,
187
+ "metadata": {
188
+ "colab": {
189
+ "base_uri": "https://localhost:8080/"
190
+ },
191
+ "collapsed": true,
192
+ "id": "K8M29Gfrtwwe",
193
+ "outputId": "97a40ad6-b9ed-432d-c889-e313b0c64bb1"
194
+ },
195
+ "outputs": [
196
+ {
197
+ "output_type": "stream",
198
+ "name": "stdout",
199
+ "text": [
200
+ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n",
201
+ "11490434/11490434 [==============================] - 0s 0us/step\n",
202
+ "Model Trained on Task 0\n",
203
+ "67/67 [==============================] - 0s 3ms/step - loss: 0.0013 - accuracy: 0.9995\n",
204
+ "Test Accuracy on Task 0 = 1.00\n"
205
+ ]
206
+ },
207
+ {
208
+ "output_type": "stream",
209
+ "name": "stderr",
210
+ "text": [
211
+ "WARNING:tensorflow:5 out of the last 1585 calls to <function _BaseOptimizer._update_step_xla at 0x7e7317df1090> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n"
212
+ ]
213
+ },
214
+ {
215
+ "output_type": "stream",
216
+ "name": "stdout",
217
+ "text": [
218
+ "Model Trained on Task 1\n",
219
+ "67/67 [==============================] - 1s 2ms/step - loss: 4.1902 - accuracy: 0.1225\n",
220
+ "Test Accuracy on Task 0 = 0.12\n",
221
+ "64/64 [==============================] - 0s 3ms/step - loss: 0.0728 - accuracy: 0.9799\n",
222
+ "Test Accuracy on Task 1 = 0.98\n"
223
+ ]
224
+ },
225
+ {
226
+ "output_type": "stream",
227
+ "name": "stderr",
228
+ "text": [
229
+ "WARNING:tensorflow:5 out of the last 1513 calls to <function _BaseOptimizer._update_step_xla at 0x7e7306532320> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n"
230
+ ]
231
+ },
232
+ {
233
+ "output_type": "stream",
234
+ "name": "stdout",
235
+ "text": [
236
+ "Model Trained on Task 2\n",
237
+ "67/67 [==============================] - 0s 3ms/step - loss: 7.8403 - accuracy: 0.0473\n",
238
+ "Test Accuracy on Task 0 = 0.05\n",
239
+ "64/64 [==============================] - 0s 2ms/step - loss: 6.0971 - accuracy: 0.0034\n",
240
+ "Test Accuracy on Task 1 = 0.00\n",
241
+ "59/59 [==============================] - 0s 2ms/step - loss: 0.3602 - accuracy: 0.9536\n",
242
+ "Test Accuracy on Task 2 = 0.95\n"
243
+ ]
244
+ }
245
+ ],
246
+ "source": [
247
+ "import numpy as np\n",
248
+ "import tensorflow as tf\n",
249
+ "from tensorflow import keras\n",
250
+ "from keras.datasets import mnist\n",
251
+ "from copy import deepcopy\n",
252
+ "\n",
253
+ "# Hyperparameters\n",
254
+ "learning_rate = 0.001\n",
255
+ "epochs = 2\n",
256
+ "lambda_ewc = 10 # Importance of past tasks\n",
257
+ "\n",
258
+ "# Load MNIST dataset\n",
259
+ "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
260
+ "x_train = x_train.reshape(-1, 28, 28, 1).astype(\"float32\") / 255.0\n",
261
+ "x_test = x_test.reshape(-1, 28, 28, 1).astype(\"float32\") / 255.0\n",
262
+ "\n",
263
+ "x_train_task, y_train_task = task_seperate(x_train,y_train)\n",
264
+ "x_test_task, y_test_task = task_seperate(x_test,y_test)\n",
265
+ "\n",
266
+ "# Define model (replace with your desired architecture)\n",
267
+ "model = keras.Sequential([\n",
268
+ " keras.layers.Flatten(input_shape=(28, 28, 1)),\n",
269
+ " keras.layers.Dense(128, activation=\"relu\"),\n",
270
+ " keras.layers.Dense(10, activation=\"softmax\")\n",
271
+ "])\n",
272
+ "\n",
273
+ "# Compile model with Adam optimizer\n",
274
+ "compile_model(model, learning_rate)\n",
275
+ "\n",
276
+ "regularisers = []\n",
277
+ "\n",
278
+ "for task in range(3):\n",
279
+ " inputs = x_train_task[task]\n",
280
+ " labels = y_train_task[task]\n",
281
+ "\n",
282
+ " for epoch in range(epochs):\n",
283
+ " train_epoch(model, (inputs, labels), batch_size=64)\n",
284
+ " valid_sets = [(x_test_task[task], y_test_task[task])]\n",
285
+ "\n",
286
+ " print(f\"Model Trained on Task {task}\")\n",
287
+ "\n",
288
+ "\n",
289
+ " for iTask in range(task+1):\n",
290
+ " test_loss, test_acc = model.evaluate(x_test_task[iTask], y_test_task[iTask])\n",
291
+ " print(f\"Test Accuracy on Task {iTask} = {test_acc:.2f}\")\n",
292
+ "\n",
293
+ " loss_fn = ewc_loss(lambda_ewc, model, (inputs, labels), x_train_task[task].shape[0])\n",
294
+ " regularisers.append(loss_fn)\n",
295
+ " compile_model(model, learning_rate, extra_losses=regularisers)\n",
296
+ "\n"
297
+ ]
298
+ }
299
+ ],
300
+ "metadata": {
301
+ "colab": {
302
+ "provenance": [],
303
+ "gpuType": "T4"
304
+ },
305
+ "kernelspec": {
306
+ "display_name": "Python 3",
307
+ "name": "python3"
308
+ },
309
+ "language_info": {
310
+ "name": "python"
311
+ },
312
+ "accelerator": "GPU"
313
+ },
314
+ "nbformat": 4,
315
+ "nbformat_minor": 0
316
+ }
data/SCR_HW1.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9423abe5c96a280e956031f1ed16046195a3a85c13210a3e712edd0d314325b6
3
+ size 623775
data/SCR_HW1_14022.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a0b343338409677a031eb2317a90f1e2040c7fd01e656c9d564e66241d64ab3a
3
+ size 489544
data/SCR_HW2.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:360dbd8807812608e224d2b6a6dfdba34c68518348c1f497de348067d202365c
3
+ size 523686
data/SCR_HW2_14022.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cbc2ca56f7c3a99561c03a6a2094ad789a95a2e7d0847f445c0f1bf6546097a1
3
+ size 575828