ნეირონული ქსელები Jupyter ნოუთბუქი · Python

კლასიფიკაცია PyTorch/TensorFlow-ით

ეს არის პრაქტიკული ნოუთბუქი. წაიკითხე კოდი და შედეგები აქ, ან გაუშვი ინტერაქტიულად Google Colab-ში ან Jupyter-ში.

ლაბორატორიული დავალება AI დამწყებთათვის სასწავლო პროგრამა-დან.

ნაწილი 1: ირისის კლასიფიკაცია

ირისის მონაცემთა ნაკრები შეიცავს 3 სხვადასხვა კლასის ირისის 150 ჩანაწერს. თითოეული ჩანაწერი შეიცავს 4 ციფრულ პარამეტრს: სეპალის სიგრძე/სიგანე და ფურცლის სიგრძე/სიგანე. ეს არის მარტივი მონაცემთა ნაკრების მაგალითი, რისთვისაც არ გჭირდებათ ძლიერი ნერვული ქსელი.

მონაცემთა ნაკრების მიღება

Iris მონაცემთა ნაკრები ჩაშენებულია Scikit Learn-ში, ასე რომ, ჩვენ შეგვიძლია მარტივად მივიღოთ იგი:

იტვირთება…
გამოტანა
Features: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'], Classes: ['setosa' 'versicolor' 'virginica']

მონაცემების ვიზუალიზაცია

ხშირ შემთხვევაში, აზრი აქვს მონაცემების ვიზუალიზაციას, რათა დავინახოთ, გამოიყურება თუ არა ისინი განცალკევებით - ეს გვარწმუნებს, რომ ჩვენ უნდა შევძლოთ კარგი კლასიფიკაციის მოდელის აგება. იმის გამო, რომ ჩვენ გვაქვს რამდენიმე მახასიათებელი, ჩვენ შეგვიძლია ავაშენოთ წყვილი 2D სკატერის ნაკვეთები, რომლებიც აჩვენებენ სხვადასხვა კლასებს სხვადასხვა წერტილოვანი ფერებით. ეს შეიძლება ავტომატურად გაკეთდეს პაკეტით, რომელსაც ეწოდება seaborn:

იტვირთება…
გამოტანა
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \
0                  5.1               3.5                1.4               0.2   
1                  4.9               3.0                1.4               0.2   
2                  4.7               3.2                1.3               0.2   
3                  4.6               3.1                1.5               0.2   
4                  5.0               3.6                1.4               0.2   
..                 ...               ...                ...               ...   
145                6.7               3.0                5.2               2.3   
146                6.3               2.5                5.0               1.9   
147                6.5               3.0                5.2               2.0   
148                6.2               3.4                5.4               2.3   
149                5.9               3.0                5.1               1.8   

     Label  
0        0  
1        0  
2        0  
3        0  
4        0  
..     ...  
145      2  
146      2  
147      2  
148      2  
149      2  

[150 rows x 5 columns]
იტვირთება…
გამოტანა
<seaborn.axisgrid.PairGrid at 0x14f4f772f70>
ნოუთბუქის გამოტანა

მონაცემების ნორმალიზება და დაშიფვრა

ნერვული ქსელის ტრენინგისთვის მონაცემების მოსამზადებლად, ჩვენ უნდა მოვახდინოთ შეყვანის ნორმალიზება დიაპაზონში [0..1]. ეს შეიძლება გაკეთდეს მარტივი numpy ოპერაციების გამოყენებით, ან Scikit Learn მეთოდები.

ასევე, თქვენ უნდა გადაწყვიტოთ, გსურთ თუ არა სამიზნე ეტიკეტი იყოს ერთჯერადი კოდირებული თუ არა. PyTorch და TensorFlow საშუალებას გაძლევთ იკვებოთ კლასის რიცხვში, როგორც მთელი რიცხვი (0-დან N-1-მდე), ან როგორც one-hot კოდირებული ვექტორი. ნერვული ქსელის სტრუქტურის შექმნისას თქვენ უნდა მიუთითოთ დაკარგვის ფუნქცია შესაბამისად (მაგ. მწირი კატეგორიული ჯვარედინი ჯვარედინი რიცხვითი წარმოდგენისთვის და კროსენტროპიის დაკარგვა one-hot კოდირებისთვის). ერთჯერადი კოდირება ასევე შეიძლება იყოს შესრულებულია Sklearn-ის გამოყენებით, ან კოდის ამ ნაწილის გამოყენებით:

იტვირთება…
იტვირთება…

დაყავით მონაცემები Train და Test

იმის გამო, რომ ჩვენ არ გვაქვს ცალკეული მატარებლისა და სატესტო მონაცემთა ნაკრები, უნდა გავყოთ ის შესავალი მატარებლისა და ტესტირების მონაცემთა ნაკრები Sklearn-ის გამოყენებით

იტვირთება…

განსაზღვრეთ და მოამზადეთ ნერვული ქსელი

ახლა თქვენ მზად ხართ წახვიდეთ, შემოიტანოთ სასურველი ჩარჩო, განსაზღვროთ ნერვული ქსელი და დაიწყოთ ვარჯიში, დააკვირდით მატარებლის ქცევას და ვალიდაციის სიზუსტეს.

იტვირთება…
იტვირთება…
იტვირთება…

ექსპერიმენტი

ახლა თქვენ შეგიძლიათ ექსპერიმენტი გააკეთოთ სხვადასხვა ქსელის არქიტექტურით, რათა ნახოთ, როგორ იმოქმედებს ეს შედეგზე. სცადეთ:

  1. ერთშრიანი ქსელი 3 ნეირონით (ტოლია კლასების რაოდენობაზე)
  2. ორფენიანი ქსელი მცირე/საშუალო/დიდი ფარული ფენით
  3. მეტი ფენის გამოყენება

დარწმუნდით, რომ დააკვირდით გადაჭარბებულ მორგებას, როდესაც იყენებთ მდიდარ მოდელს უამრავი ნეირონით (პარამეტრით).

იტვირთება…

ნაწილი 2: MNIST ტრენინგი

ორივე Keras და PyTorch შეიცავს MNIST-ს, როგორც ჩაშენებულ მონაცემთა ბაზას, ასე რომ თქვენ შეგიძლიათ მარტივად მიიღოთ ის კოდის რამდენიმე ხაზით (კერასი, PyTorch). თქვენ ასევე შეძლებთ ჩატვირთოთ როგორც მატარებლის, ასევე ტესტირების მონაცემთა ნაკრები მათი ხელით გაყოფის გარეშე.

იტვირთება…

ახლა თქვენ უნდა შეასრულოთ ზემოთ მოყვანილი ნაბიჯები, რათა დარწმუნდეთ, რომ მონაცემთა ბაზა ნორმალიზებულია (ეს ალბათ უკვე იქნებოდა), განსაზღვრეთ და მოამზადეთ ნერვული ქსელი.

Takeaway

  1. ნერვული ქსელები შეიძლება გამოვიყენოთ მანქანური სწავლების ტრადიციული ამოცანებისთვის. თუმცა, ისინი ხშირ შემთხვევაში ზედმეტად ძლიერია და შეიძლება გამოიწვიოს გადაჭარბებული მორგება.
  2. ამ დავალებაში მნიშვნელოვანია, რომ დააკვირდეთ ზედმეტად მორგებულ ქცევას და შეეცადოთ თავიდან აიცილოთ იგი.
  3. Keras-ის მსგავსი ჩარჩოებით, ზოგჯერ ნერვული ქსელის სწავლება საკმაოდ მარტივია. მაგრამ თქვენ უნდა გესმოდეთ რა ხდება.

ეს გაკვეთილი არის Microsoft “AI for Beginners” კურსის ქართული თარგმანი, გავრცელებული MIT ლიცენზიით.