კომპიუტერული ხედვა Jupyter ნოუთბუქი · Python

მონაცემთა ნაკრების მომზადება ღრმა სწავლისთვის

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

შინაური ცხოველის რეალური ცხოვრების სურათების # კლასიფიკაცია

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

ახლა დროა გაუმკლავდეთ უფრო რთულ ამოცანას - ორიგინალური Oxford-IIIT მონაცემთა ნაკრები კლასიფიკაციას. დავიწყოთ მონაცემთა ნაკრების ჩატვირთვით და ვიზუალიზაციით.

იტვირთება…

ჩვენ განვსაზღვრავთ ზოგად ფუნქციას სიიდან სურათების სერიის საჩვენებლად:

იტვირთება…

თქვენ ხედავთ, რომ ყველა სურათი მდებარეობს ერთ დირექტორიაში, სახელწოდებით images და მათი სახელი შეიცავს კლასის (ჯიშის) სახელს:

იტვირთება…

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

იტვირთება…

მოდით ასევე განვსაზღვროთ კლასების რაოდენობა ჩვენს მონაცემთა ბაზაში:

იტვირთება…
გამოტანა
37

ჩვენი ნერვული ქსელის სწავლების დასაწყებად, ჩვენ უნდა გადავიყვანოთ ყველა სურათი ტენსორებად და ასევე შევქმნათ ეტიკეტების შესაბამისი ტენსორები (კლასის ნომრები). Most neural network frameworks contain simple tools for dealing with images:

  • In Tensorflow, use tf.keras.preprocessing.image_dataset_from_directory
  • In PyTorch, use torchvision.datasets.ImageFolder

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

იტვირთება…

ახლა ჩვენ უნდა გავყოთ მონაცემთა ბაზა მატარებლისა და ტესტის ნაწილებად:

იტვირთება…

ახლა განსაზღვრეთ მონაცემთა დამტვირთავი:

იტვირთება…
იტვირთება…
გამოტანა
<Figure size 3024x2016 with 7 Axes>
<Figure size 3024x2016 with 7 Axes>
<Figure size 3024x2016 with 7 Axes>

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

For image classification, you should probably define a convolutional neural network with several layers. რას მივაქციოთ თვალი:

  • Keep in mind the pyramid architecture, i.e. number of filters should increase as you go deeper
  • არ დაგავიწყდეთ აქტივაციის ფუნქციები ფენებს შორის (ReLU) და Max Pooling
  • საბოლოო კლასიფიკატორი შეიძლება იყოს ფარული შრეებით ან მის გარეშე, მაგრამ გამომავალი ნეირონების რაოდენობა უნდა იყოს კლასების რაოდენობის ტოლი.

მნიშვნელოვანი ის არის, რომ სწორად მივიღოთ აქტივაციის ფუნქცია ბოლო ფენაზე + დაკარგვის ფუნქცია:

  • Tensorflow-ში შეგიძლიათ გამოიყენოთ softmax როგორც გააქტიურება და sparse_categorical_crossentropy როგორც დაკარგვა. განსხვავება იშვიათ კატეგორიულ ჯვარედინი ენტროპიასა და არასპარსს შორის არის ის, რომ პირველი მოელის გამომავალს, როგორც კლასის რაოდენობას და არა როგორც one-hot ვექტორს.
  • PyTorch-ში შეგიძლიათ გქონდეთ საბოლოო ფენა აქტივაციის ფუნქციის გარეშე და გამოიყენოთ CrossEntropyLoss დაკარგვის ფუნქცია. ეს ფუნქცია ავტომატურად მოქმედებს softmax-ზე.

მინიშნება: PyTorch-ში შეგიძლიათ გამოიყენოთ LazyLinear ფენა Linear-ის ნაცვლად, რათა თავიდან აიცილოთ შეყვანის რაოდენობის გამოთვლა. მას მხოლოდ ერთი n_out პარამეტრი სჭირდება, რაც არის ნეირონების რაოდენობა ფენაში და შეყვანის მონაცემების განზომილება ავტომატურად აისახება პირველი forward გავლისას.

იტვირთება…

ავარჯიშეთ ნერვული ქსელი

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

იტვირთება…
იტვირთება…
გამოტანა
ნოუთბუქის გამოტანა

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

ტრანსფერი სწავლა

სიზუსტის გასაუმჯობესებლად, გამოვიყენოთ წინასწარ გაწვრთნილი ნერვული ქსელი, როგორც მახასიათებლების ამომყვანი. მოგერიდებათ ექსპერიმენტი VGG-16/VGG-19 მოდელებით, ResNet50 და ა.შ.

ვინაიდან ეს ტრენინგი უფრო ნელია, შეგიძლიათ დაიწყოთ მოდელის წვრთნა მცირე რაოდენობის ეპოქებისთვის, მაგ. 3. საჭიროების შემთხვევაში, ყოველთვის შეგიძლიათ განაახლოთ ვარჯიში სიზუსტის შემდგომი გასაუმჯობესებლად.

ჩვენ გვჭირდება ჩვენი მონაცემების სხვაგვარად ნორმალიზება გადაცემის სწავლისთვის, რითაც ჩვენ ხელახლა ჩავტვირთავთ მონაცემთა ბაზას ტრანსფორმაციის სხვადასხვა ნაკრების გამოყენებით:

იტვირთება…

მოდით ჩატვირთოთ წინასწარ მომზადებული ქსელი:

იტვირთება…

ახლა განსაზღვრეთ თქვენი პრობლემის კლასიფიკაციის მოდელი:

  • PyTorch-ში არის სლოტი სახელწოდებით classifier, რომელიც შეგიძლიათ შეცვალოთ თქვენივე კლასიფიკატორით სასურველი რაოდენობის კლასებისთვის.
  • TensorFlow-ში გამოიყენეთ VGG ქსელი, როგორც ფუნქციების ამომყვანი, და შექმენით Sequential მოდელი VGG, როგორც პირველი ფენა, და თქვენი საკუთარი კლასიფიკატორი თავზე.
იტვირთება…

დარწმუნდით, რომ დააყენეთ VGG ფუნქციების ამომყვანის ყველა პარამეტრი ისე, რომ არ იყოს სავარჯიშო

იტვირთება…

ახლა შეგვიძლია დავიწყოთ ვარჯიში. იყავით ძალიან მომთმენი, რადგან ვარჯიშს დიდი დრო სჭირდება და ჩვენი მატარებლის ფუნქცია არ არის შექმნილი იმისთვის, რომ ეპოქის დასრულებამდე არაფერი დაბეჭდოთ.

იტვირთება…

ახლა ბევრად უკეთესი ჩანს!

სურვილისამებრ: გამოთვალეთ ტოპ 3 სიზუსტე

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

იტვირთება…

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