chore(i18n): sync translations with latest source changes (chunk 1/1, 19 changes)
This commit is contained in:
parent
899459e1ab
commit
2af9ee06d7
|
|
@ -5,6 +5,12 @@
|
|||
"source_file": "AGENTS.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
"CONTRIBUTING.md": {
|
||||
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
|
||||
"translation_date": "2026-07-08T15:26:17+00:00",
|
||||
"source_file": "CONTRIBUTING.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
"README.md": {
|
||||
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
|
||||
"translation_date": "2026-04-06T15:43:24+00:00",
|
||||
|
|
@ -17,6 +23,19 @@
|
|||
"source_file": "SECURITY.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
"__translation_failures__": {
|
||||
"lessons/sketchnotes/LICENSE.md": {
|
||||
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
|
||||
"source_file": "lessons/sketchnotes/LICENSE.md",
|
||||
"language_code": "el",
|
||||
"failure_date": "2026-07-08T15:24:46+00:00",
|
||||
"status": "failed",
|
||||
"error_type": "TranslationIncompleteError",
|
||||
"error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
|
||||
"translator_version": "0.20.0",
|
||||
"failure_policy_version": 1
|
||||
}
|
||||
},
|
||||
"etc/CODE_OF_CONDUCT.md": {
|
||||
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
|
||||
"translation_date": "2025-08-29T09:31:40+00:00",
|
||||
|
|
@ -54,8 +73,8 @@
|
|||
"language_code": "el"
|
||||
},
|
||||
"examples/README.md": {
|
||||
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
|
||||
"translation_date": "2025-10-03T11:30:48+00:00",
|
||||
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
|
||||
"translation_date": "2026-07-08T15:19:36+00:00",
|
||||
"source_file": "examples/README.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
|
|
@ -66,8 +85,8 @@
|
|||
"language_code": "el"
|
||||
},
|
||||
"lessons/0-course-setup/how-to-run.md": {
|
||||
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
|
||||
"translation_date": "2026-01-15T14:36:53+00:00",
|
||||
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
|
||||
"translation_date": "2026-07-08T15:19:57+00:00",
|
||||
"source_file": "lessons/0-course-setup/how-to-run.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
|
|
@ -191,6 +210,12 @@
|
|||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
|
||||
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
|
||||
"translation_date": "2026-07-08T15:08:26+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
|
||||
"language_code": "el"
|
||||
},
|
||||
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
|
||||
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
|
||||
"translation_date": "2025-08-29T08:50:39+00:00",
|
||||
|
|
@ -330,8 +355,8 @@
|
|||
"language_code": "el"
|
||||
},
|
||||
"lessons/5-NLP/README.md": {
|
||||
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
|
||||
"translation_date": "2025-08-29T09:16:04+00:00",
|
||||
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
|
||||
"translation_date": "2026-07-08T15:20:26+00:00",
|
||||
"source_file": "lessons/5-NLP/README.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
|
|
@ -355,7 +380,7 @@
|
|||
},
|
||||
"lessons/6-Other/23-MultiagentSystems/README.md": {
|
||||
"original_hash": "38a1185ae3d54b180378bbd71ae3ef16",
|
||||
"translation_date": "2025-09-23T08:48:14+00:00",
|
||||
"translation_date": "2026-07-08T15:25:45+00:00",
|
||||
"source_file": "lessons/6-Other/23-MultiagentSystems/README.md",
|
||||
"language_code": "el"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
# Συνεισφορά στο AI-For-Beginners
|
||||
|
||||
Σας ευχαριστούμε για το ενδιαφέρον σας να συνεισφέρετε στο AI-For-Beginners! Καλωσορίζουμε μεταφράσεις, διορθώσεις μαθημάτων και διορθώσεις μορφοποίησης.
|
||||
|
||||
## Συμφωνία Άδειας Συνεργάτη της Microsoft (CLA)
|
||||
|
||||
Αυτό το έργο καλωσορίζει συνεισφορές και προτάσεις. Οι περισσότερες συνεισφορές απαιτούν να συμφωνήσετε με μια Συμφωνία Άδειας Συνεργάτη (CLA) που δηλώνει ότι έχετε το δικαίωμα και όντως παραχωρείτε σε εμάς τα δικαιώματα να χρησιμοποιήσουμε τη συνεισφορά σας. Για λεπτομέρειες, επισκεφθείτε το [https://cla.microsoft.com](https://cla.microsoft.com).
|
||||
|
||||
Όταν υποβάλετε ένα Pull Request, ένας CLA-bot θα καθορίσει αυτόματα αν χρειάζεται να παρέχετε μια CLA και θα διακοσμήσει κατάλληλα το PR (π.χ., ετικέτα, σχόλιο). Απλώς ακολουθήστε τις οδηγίες που παρέχει το bot. Θα χρειαστεί να το κάνετε μόνο μια φορά σε όλα τα αποθετήρια που χρησιμοποιούν το CLA μας.
|
||||
|
||||
## Πώς να Συνεισφέρετε
|
||||
|
||||
### 1. Διόρθωση Τυπογραφικών / Σφαλμάτων Κώδικα
|
||||
Αν βρείτε ένα τυπογραφικό λάθος ή σφάλμα σε οποιοδήποτε Jupyter notebook ή αρχείο markdown μαθήματος:
|
||||
1. Φτιάξτε fork το αποθετήριο.
|
||||
2. Διορθώστε το τυπογραφικό λάθος ή το σπασμένο σύνδεσμο.
|
||||
3. Υποβάλετε ένα Pull Request με μια σαφή περιγραφή της διόρθωσης.
|
||||
|
||||
### 2. Υποβολή Μεταφράσεων
|
||||
Καλωσορίζουμε μεταφράσεις των μαθημάτων σε άλλες γλώσσες! Παρακαλώ τοποθετήστε τις μεταφράσεις στον κατάλογο `translations/` χρησιμοποιώντας τα υπάρχοντα ονόματα φακέλων εκεί (για παράδειγμα `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`).
|
||||
|
||||
Για περισσότερες λεπτομέρειες, δείτε το [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Αποποίηση ευθυνών**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,31 +1,31 @@
|
|||
# Παραδείγματα AI για Αρχάριους
|
||||
# Παραδείγματα Φιλικά για Αρχάριους στην ΤΝ
|
||||
|
||||
Καλώς ήρθατε! Αυτός ο κατάλογος περιέχει απλά, αυτόνομα παραδείγματα για να σας βοηθήσει να ξεκινήσετε με την τεχνητή νοημοσύνη και τη μηχανική μάθηση. Κάθε παράδειγμα είναι σχεδιασμένο για αρχάριους, με λεπτομερή σχόλια και βήμα-βήμα εξηγήσεις.
|
||||
Καλώς ήρθατε! Αυτός ο φάκελος περιέχει απλά, αυτόνομα παραδείγματα για να σας βοηθήσουν να ξεκινήσετε με την Τεχνητή Νοημοσύνη και τη μηχανική μάθηση. Κάθε παράδειγμα έχει σχεδιαστεί για να είναι φιλικό προς τους αρχάριους με λεπτομερή σχόλια και επεξηγήσεις βήμα-βήμα.
|
||||
|
||||
## 📚 Επισκόπηση Παραδειγμάτων
|
||||
|
||||
| Παράδειγμα | Περιγραφή | Δυσκολία | Προαπαιτούμενα |
|
||||
|------------|-----------|----------|----------------|
|
||||
| [Hello AI World](../../../examples/01-hello-ai-world.py) | Το πρώτο σας πρόγραμμα AI - απλή αναγνώριση μοτίβων | ⭐ Αρχάριος | Βασικές γνώσεις Python |
|
||||
| [Simple Neural Network](../../../examples/02-simple-neural-network.py) | Δημιουργία ενός νευρωνικού δικτύου από την αρχή | ⭐⭐ Αρχάριος+ | Python, βασικά μαθηματικά |
|
||||
| [Image Classifier](./03-image-classifier.ipynb) | Κατηγοριοποίηση εικόνων με ένα προεκπαιδευμένο μοντέλο | ⭐⭐ Αρχάριος+ | Python, numpy |
|
||||
| [Text Sentiment](../../../examples/04-text-sentiment.py) | Ανάλυση συναισθημάτων κειμένου (θετικό/αρνητικό) | ⭐⭐ Αρχάριος+ | Python |
|
||||
|---------|-------------|------------|---------------|
|
||||
| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Το πρώτο σας πρόγραμμα ΤΝ - απλή αναγνώριση προτύπων | ⭐ Αρχάριος | Βασικά Python |
|
||||
| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Δημιουργία νευρωνικού δικτύου από την αρχή | ⭐⭐ Αρχάριος+ | Python, βασικά μαθηματικά |
|
||||
| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Ταξινόμηση εικόνων με προεκπαιδευμένο μοντέλο | ⭐⭐ Αρχάριος+ | Python, numpy |
|
||||
| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Ανάλυση συναισθήματος κειμένου (θετικό/αρνητικό) | ⭐⭐ Αρχάριος+ | Python |
|
||||
|
||||
## 🚀 Ξεκινώντας
|
||||
|
||||
### Προαπαιτούμενα
|
||||
|
||||
Βεβαιωθείτε ότι έχετε εγκαταστήσει το Python (συνιστάται η έκδοση 3.8 ή νεότερη). Εγκαταστήστε τα απαραίτητα πακέτα:
|
||||
Βεβαιωθείτε ότι έχετε εγκαταστήσει Python (συνιστάται έκδοση 3.8 ή νεότερη). Εγκαταστήστε τα απαραίτητα πακέτα:
|
||||
|
||||
```bash
|
||||
# For Python scripts
|
||||
# Για σκριπτάκια Python
|
||||
pip install numpy
|
||||
|
||||
# For Jupyter notebooks (image classifier)
|
||||
# Για σημειωματάρια Jupyter (ταξινομητής εικόνων)
|
||||
pip install jupyter numpy pillow tensorflow
|
||||
```
|
||||
|
||||
Ή χρησιμοποιήστε το περιβάλλον conda από το κύριο πρόγραμμα σπουδών:
|
||||
Ή χρησιμοποιήστε το περιβάλλον conda από το κύριο μάθημα:
|
||||
|
||||
```bash
|
||||
conda env create --name ai4beg --file ../environment.yml
|
||||
|
|
@ -34,12 +34,12 @@ conda activate ai4beg
|
|||
|
||||
### Εκτέλεση των Παραδειγμάτων
|
||||
|
||||
**Για αρχεία Python (.py):**
|
||||
**Για σενάρια Python (.py αρχεία):**
|
||||
```bash
|
||||
python 01-hello-ai-world.py
|
||||
```
|
||||
|
||||
**Για Jupyter notebooks (.ipynb):**
|
||||
**Για Jupyter σημειωματάρια (.ipynb αρχεία):**
|
||||
```bash
|
||||
jupyter notebook 03-image-classifier.ipynb
|
||||
```
|
||||
|
|
@ -48,24 +48,24 @@ jupyter notebook 03-image-classifier.ipynb
|
|||
|
||||
Συνιστούμε να ακολουθήσετε τα παραδείγματα με τη σειρά:
|
||||
|
||||
1. **Ξεκινήστε με το "Hello AI World"** - Μάθετε τα βασικά της αναγνώρισης μοτίβων
|
||||
2. **Δημιουργήστε ένα Απλό Νευρωνικό Δίκτυο** - Κατανοήστε πώς λειτουργούν τα νευρωνικά δίκτυα
|
||||
3. **Δοκιμάστε τον Κατηγοριοποιητή Εικόνων** - Δείτε την AI σε δράση με πραγματικές εικόνες
|
||||
4. **Αναλύστε Συναισθήματα Κειμένου** - Εξερευνήστε την επεξεργασία φυσικής γλώσσας
|
||||
1. **Ξεκινήστε με το "Hello AI World"** - Μάθετε τα βασικά της αναγνώρισης προτύπων
|
||||
2. **Δημιουργία Απλού Νευρωνικού Δικτύου** - Κατανοήστε πώς λειτουργούν τα νευρωνικά δίκτυα
|
||||
3. **Δοκιμάστε τον Ταξινομητή Εικόνων** - Δείτε την ΤΝ σε δράση με πραγματικές εικόνες
|
||||
4. **Ανάλυση Συναισθήματος Κειμένου** - Εξερευνήστε την επεξεργασία φυσικής γλώσσας
|
||||
|
||||
## 💡 Συμβουλές για Αρχάριους
|
||||
|
||||
- **Διαβάστε προσεκτικά τα σχόλια του κώδικα** - Εξηγούν τι κάνει κάθε γραμμή
|
||||
- **Διαβάστε προσεκτικά τα σχόλια στον κώδικα** - Εξηγούν τι κάνει κάθε γραμμή
|
||||
- **Πειραματιστείτε!** - Δοκιμάστε να αλλάξετε τιμές και δείτε τι συμβαίνει
|
||||
- **Μην ανησυχείτε αν δεν καταλαβαίνετε τα πάντα** - Η μάθηση απαιτεί χρόνο
|
||||
- **Κάντε ερωτήσεις** - Χρησιμοποιήστε τον [Πίνακα Συζητήσεων](https://github.com/microsoft/AI-For-Beginners/discussions)
|
||||
- **Κάντε ερωτήσεις** - Χρησιμοποιήστε το [Discussion board](https://github.com/microsoft/AI-For-Beginners/discussions)
|
||||
|
||||
## 🔗 Επόμενα Βήματα
|
||||
|
||||
Αφού ολοκληρώσετε αυτά τα παραδείγματα, εξερευνήστε το πλήρες πρόγραμμα σπουδών:
|
||||
- [Εισαγωγή στην AI](../lessons/1-Intro/README.md)
|
||||
- [Εισαγωγή στην ΤΝ](../lessons/1-Intro/README.md)
|
||||
- [Νευρωνικά Δίκτυα](../lessons/3-NeuralNetworks/README.md)
|
||||
- [Όραση Υπολογιστών](../lessons/4-ComputerVision/README.md)
|
||||
- [Υπολογιστική Όραση](../lessons/4-ComputerVision/README.md)
|
||||
- [Επεξεργασία Φυσικής Γλώσσας](../lessons/5-NLP/README.md)
|
||||
|
||||
## 🤝 Συνεισφορά
|
||||
|
|
@ -77,9 +77,11 @@ jupyter notebook 03-image-classifier.ipynb
|
|||
|
||||
---
|
||||
|
||||
*Θυμηθείτε: Κάθε ειδικός ήταν κάποτε αρχάριος. Καλή μάθηση! 🎓*
|
||||
*Θυμηθείτε: Κάθε ειδικός κάποτε ήταν αρχάριος. Καλή μάθηση! 🎓*
|
||||
|
||||
---
|
||||
|
||||
**Αποποίηση Ευθύνης**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Αποποίηση ευθυνών**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
# Πώς να Εκτελέσετε τον Κώδικα
|
||||
|
||||
Αυτή η διδακτέα ύλη περιέχει πολλά εκτελέσιμα παραδείγματα και εργαστήρια που θα θέλατε να τρέξετε. Για να το κάνετε αυτό, χρειάζεστε τη δυνατότητα εκτέλεσης κώδικα Python σε Jupyter Notebooks που παρέχονται ως μέρος αυτής της διδακτέας ύλης. Έχετε αρκετές επιλογές για να τρέξετε τον κώδικα:
|
||||
Αυτή η ύλη περιέχει πολλά εκτελέσιμα παραδείγματα και εργαστήρια που ίσως θέλετε να τρέξετε. Για να το κάνετε αυτό, χρειάζεστε τη δυνατότητα να εκτελείτε κώδικα Python σε Jupyter Notebooks που παρέχονται ως μέρος αυτής της ύλης. Έχετε αρκετές επιλογές για να τρέξετε τον κώδικα:
|
||||
|
||||
## Εκτέλεση τοπικά στον υπολογιστή σας
|
||||
|
||||
Για να εκτελέσετε τον κώδικα τοπικά στον υπολογιστή σας, απαιτείται μια εγκατάσταση Python. Μία πρόταση είναι να εγκαταστήσετε το **[miniconda](https://conda.io/en/latest/miniconda.html)** - είναι μια αρκετά ελαφριά εγκατάσταση που υποστηρίζει το διαχειριστή πακέτων `conda` για διαφορετικά **εικονικά περιβάλλοντα** Python.
|
||||
Για να τρέξετε τον κώδικα τοπικά στον υπολογιστή σας, απαιτείται εγκατάσταση της Python. Μία σύσταση είναι να εγκαταστήσετε **[miniconda](https://conda.io/en/latest/miniconda.html)** - είναι μια σχετικά ελαφριά εγκατάσταση που υποστηρίζει τον διαχειριστή πακέτων `conda` για διαφορετικά **εικονικά περιβάλλοντα** Python.
|
||||
|
||||
Μετά την εγκατάσταση του miniconda, κλωνοποιήστε το αποθετήριο και δημιουργήστε ένα εικονικό περιβάλλον που θα χρησιμοποιηθεί για αυτό το μάθημα:
|
||||
|
||||
|
|
@ -15,57 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml
|
|||
conda activate ai4beg
|
||||
```
|
||||
|
||||
### Χρήση Visual Studio Code με την Επέκταση Python
|
||||
### Χρήση του Visual Studio Code με την Επέκταση Python
|
||||
|
||||
Αυτή η διδακτέα ύλη χρησιμοποιείται καλύτερα όταν ανοίγεται στο [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) με την [Επέκταση Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
|
||||
Αυτή η ύλη χρησιμοποιείται καλύτερα όταν ανοίγετε το περιεχόμενο με το [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) με την [Επέκταση Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
|
||||
|
||||
> **Σημείωση**: Μόλις κάνετε κλωνοποίηση και ανοίξετε τον φάκελο στο VS Code, θα προτείνει αυτόματα να εγκαταστήσετε τις επεκτάσεις Python. Επίσης, θα πρέπει να εγκαταστήσετε το miniconda όπως περιγράφεται παραπάνω.
|
||||
> **Σημείωση**: Μόλις κλωνοποιήσετε και ανοίξετε τον φάκελο στο VS Code, θα σας προταθεί αυτόματα να εγκαταστήσετε τις επεκτάσεις Python. Θα πρέπει επίσης να εγκαταστήσετε το miniconda όπως περιγράφεται παραπάνω.
|
||||
|
||||
> **Σημείωση**: Αν το VS Code σας προτείνει να ανοίξετε ξανά το αποθετήριο σε ένα container, θα πρέπει να αρνηθείτε αυτό για να χρησιμοποιήσετε την τοπική εγκατάσταση Python.
|
||||
> **Σημείωση**: Εάν το VS Code σας προτείνει να ανοίξετε ξανά το αποθετήριο σε container, θα πρέπει να αρνηθείτε αυτό για να χρησιμοποιήσετε την τοπική εγκατάσταση Python.
|
||||
|
||||
### Χρήση Jupyter στον Browser
|
||||
### Χρήση Jupyter στον Περιηγητή
|
||||
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε ένα περιβάλλον Jupyter από τον browser στον δικό σας υπολογιστή. Τόσο το κλασικό Jupyter όσο και το JupyterHub παρέχουν ένα βολικό περιβάλλον ανάπτυξης με αυτόματη συμπλήρωση, επισήμανση κώδικα κτλ.
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε ένα περιβάλλον Jupyter από τον περιηγητή στον δικό σας υπολογιστή. Τόσο το κλασικό Jupyter όσο και το JupyterHub προσφέρουν ένα βολικό περιβάλλον ανάπτυξης με αυτόματη συμπλήρωση, επισήμανση κώδικα κ.ά.
|
||||
|
||||
Για να ξεκινήσετε το Jupyter τοπικά, πηγαίνετε στον φάκελο του μαθήματος και εκτελέστε:
|
||||
|
||||
```bash
|
||||
jupyter notebook
|
||||
```
|
||||
ή
|
||||
ή
|
||||
```bash
|
||||
jupyterhub
|
||||
```
|
||||
Στη συνέχεια μπορείτε να πλοηγηθείτε σε οποιοδήποτε από τα αρχεία `.ipynb`, να τα ανοίξετε και να ξεκινήσετε να εργάζεστε.
|
||||
Στη συνέχεια μπορείτε να πλοηγηθείτε σε οποιοδήποτε αρχείο `.ipynb`, να το ανοίξετε και να ξεκινήσετε τη δουλειά.
|
||||
|
||||
### Εκτέλεση σε container
|
||||
|
||||
Μια εναλλακτική στην εγκατάσταση Python θα ήταν να τρέξετε τον κώδικα σε container. Επειδή το αποθετήριό μας παρέχει έναν ειδικό φάκελο `.devcontainer` που καθοδηγεί πώς να δημιουργήσετε ένα container για αυτό το αποθετήριο, το VS Code προσφέρει τη δυνατότητα να ξανανοίξετε τον κώδικα σε container. Αυτό θα απαιτήσει εγκατάσταση Docker, και επίσης είναι πιο πολύπλοκο, οπότε το προτείνουμε σε πιο έμπειρους χρήστες.
|
||||
Μία εναλλακτική στην εγκατάσταση Python είναι να τρέξετε τον κώδικα σε container. Επειδή το αποθετήριό μας παρέχει έναν ειδικό φάκελο `.devcontainer` που καθοδηγεί το πώς να κατασκευάσετε ένα container για αυτό το repo, το VS Code προσφέρει τη δυνατότητα να ανοίξετε ξανά τον κώδικα μέσα σε ένα container. Αυτό απαιτεί την εγκατάσταση του Docker και είναι πιο πολύπλοκο, οπότε προτείνεται σε πιο έμπειρους χρήστες.
|
||||
|
||||
## Εκτέλεση στο Cloud
|
||||
|
||||
Αν δεν θέλετε να εγκαταστήσετε Python τοπικά και έχετε πρόσβαση σε πόρους cloud - μια καλή εναλλακτική είναι να τρέξετε τον κώδικα στο cloud. Υπάρχουν πολλοί τρόποι να το κάνετε:
|
||||
Εάν δεν θέλετε να εγκαταστήσετε Python τοπικά και έχετε πρόσβαση σε κάποιους πόρους cloud - μια καλή εναλλακτική είναι να τρέξετε τον κώδικα στο cloud. Υπάρχουν αρκετοί τρόποι να το κάνετε:
|
||||
|
||||
* Χρησιμοποιώντας το **[GitHub Codespaces](https://github.com/features/codespaces)**, που είναι ένα εικονικό περιβάλλον δημιουργημένο για εσάς στο GitHub, προσβάσιμο μέσω περιβάλλοντος VS Code στον browser. Αν έχετε πρόσβαση στα Codespaces, απλά κάντε κλικ στο κουμπί **Code** στο αποθετήριο, ξεκινήστε ένα codespace και τρέξτε σε χρόνο μηδέν.
|
||||
* Χρησιμοποιώντας το **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. Το [Binder](https://mybinder.org) προσφέρει δωρεάν πόρους υπολογισμού στο cloud για ανθρώπους σαν εσάς να δοκιμάσουν κώδικα στο GitHub. Υπάρχει ένα κουμπί στην αρχική σελίδα για να ανοίξετε το αποθετήριο στο Binder - αυτό θα σας πάρει γρήγορα στον ιστότοπο του binder, που θα δημιουργήσει το υποκείμενο container και θα ξεκινήσει μια διεπαφή Jupyter web για εσάς χωρίς καθυστερήσεις.
|
||||
* Χρησιμοποιώντας **[GitHub Codespaces](https://github.com/features/codespaces)**, το οποίο είναι ένα εικονικό περιβάλλον που δημιουργείται για εσάς στο GitHub, προσβάσιμο μέσω της διεπαφής περιηγητή VS Code. Εάν έχετε πρόσβαση σε Codespaces, απλά κάντε κλικ στο κουμπί **Code** στο repo, ξεκινήστε ένα codespace και αρχίστε να δουλεύετε σε χρόνο μηδέν.
|
||||
* Χρησιμοποιώντας **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. Το [Binder](https://mybinder.org) προσφέρει δωρεάν υπολογιστικούς πόρους στο cloud για ανθρώπους σαν εσάς να δοκιμάζουν κώδικα από το GitHub. Υπάρχει ένα κουμπί στην αρχική σελίδα για να ανοίξετε το αποθετήριο στο Binder - αυτό θα σας μεταφέρει γρήγορα στην ιστοσελίδα του binder, όπου θα δημιουργήσει το υποκείμενο container και θα ξεκινήσει ένα web interface Jupyter για εσάς αβίαστα.
|
||||
|
||||
> **Σημείωση**: Για την αποφυγή καταχρήσεων, το Binder έχει αποκλεισμένη την πρόσβαση σε ορισμένους διαδικτυακούς πόρους. Αυτό μπορεί να εμποδίσει κάποιον κώδικα που χρησιμοποιεί μοντέλα και/ή σύνολα δεδομένων από το δημόσιο Διαδίκτυο να λειτουργήσει. Μπορεί να χρειαστεί να βρείτε ορισμένες λύσεις. Επίσης, οι πόροι υπολογισμού που παρέχει το Binder είναι βασικοί, οπότε η εκπαίδευση μπορεί να είναι αργή, ειδικά σε μεταγενέστερα, πιο σύνθετα μαθήματα.
|
||||
> **Σημείωση**: Για να αποτραπεί η κακή χρήση, το Binder μπλοκάρει την πρόσβαση σε κάποιους πόρους web. Αυτό μπορεί να αποτρέψει τη λειτουργία μέρους του κώδικα που κατεβάζει μοντέλα ή σύνολα δεδομένων από το δημόσιο Internet. Μπορεί να χρειαστεί να βρείτε κάποιες εναλλακτικές λύσεις. Επιπλέον, οι υπολογιστικοί πόροι που παρέχει το Binder είναι αρκετά βασικοί, έτσι η εκπαίδευση θα είναι αργή, ιδιαίτερα στα μεταγενέστερα, πιο σύνθετα μαθήματα.
|
||||
|
||||
## Εκτέλεση στο Cloud με GPU
|
||||
|
||||
Μερικά από τα μεταγενέστερα μαθήματα αυτής της ύλης θα ωφεληθούν σημαντικά από την υποστήριξη GPU. Η εκπαίδευση μοντέλων, για παράδειγμα, μπορεί να είναι πολύ αργή διαφορετικά. Υπάρχουν μερικές επιλογές που μπορείτε να ακολουθήσετε, ειδικά αν έχετε πρόσβαση στο cloud είτε μέσω του [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), είτε μέσω του ιδρύματός σας:
|
||||
Μερικά από τα μεταγενέστερα μαθήματα αυτής της ύλης θα επωφεληθούν σημαντικά από την υποστήριξη GPU. Η εκπαίδευση μοντέλων, για παράδειγμα, μπορεί να είναι βασανιστικά αργή διαφορετικά. Υπάρχουν μερικές επιλογές που μπορείτε να ακολουθήσετε, ειδικά αν έχετε πρόσβαση στο cloud είτε μέσω του [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), είτε μέσω του ιδρύματός σας:
|
||||
|
||||
* Δημιουργήστε [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) και συνδεθείτε σε αυτήν μέσω Jupyter. Μπορείτε τότε να κλωνοποιήσετε το αποθετήριο απευθείας στη μηχανή και να ξεκινήσετε να μαθαίνετε. Οι NC-series VM υποστηρίζουν GPU.
|
||||
* Δημιουργήστε [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) και συνδεθείτε σε αυτή μέσω του Jupyter. Μπορείτε στη συνέχεια να κλωνοποιήσετε το repo απευθείας στη μηχανή και να ξεκινήσετε τη μάθηση. Οι μηχανές NC-series έχουν υποστήριξη GPU.
|
||||
|
||||
> **Σημείωση**: Ορισμένες συνδρομές, συμπεριλαμβανομένου του Azure for Students, δεν παρέχουν υποστήριξη GPU απευθείας. Μπορεί να χρειαστεί να ζητήσετε πρόσθετους πυρήνες GPU με αίτημα τεχνικής υποστήριξης.
|
||||
> **Σημείωση**: Ορισμένες συνδρομές, συμπεριλαμβανομένων των Azure for Students, δεν παρέχουν GPU υποστήριξη από προεπιλογή. Μπορεί να χρειαστεί να ζητήσετε επιπλέον πυρήνες GPU μέσω τεχνικής υποστήριξης.
|
||||
|
||||
* Δημιουργήστε [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) και χρησιμοποιήστε εκεί τη λειτουργία Notebook. [Αυτό το βίντεο](https://azure-for-academics.github.io/quickstart/azureml-papers/) δείχνει πώς να κλωνοποιήσετε ένα αποθετήριο σε notebook του Azure ML και να το αρχίσετε να το χρησιμοποιείτε.
|
||||
* Δημιουργήστε [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) και μετά χρησιμοποιήστε τη λειτουργία Notebook εκεί. [Αυτό το βίντεο](https://azure-for-academics.github.io/quickstart/azureml-papers/) δείχνει πώς να κλωνοποιήσετε ένα αποθετήριο σε ένα notebook Azure ML και να αρχίσετε να το χρησιμοποιείτε.
|
||||
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε το Google Colab, που προσφέρει κάποια δωρεάν υποστήριξη GPU, και να ανεβάσετε εκεί τα Jupyter Notebooks για να τα εκτελέσετε ένα-ένα.
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε το Google Colab, που διαθέτει δωρεάν υποστήριξη GPU, και να ανεβάσετε εκεί Jupyter Notebooks για να τα εκτελέσετε ένα-ένα.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Αποποίηση ευθυνών**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ προσπαθούμε για ακρίβεια, παρακαλούμε σημειώστε ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα προέλευσής του πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, προτείνεται η επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρανοήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
**Αποποίηση ευθυνών**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -6,9 +6,9 @@
|
|||
"source": [
|
||||
"# Προεκπαιδευμένα μοντέλα και μεταφορά μάθησης\n",
|
||||
"\n",
|
||||
"Η εκπαίδευση των CNNs μπορεί να απαιτήσει πολύ χρόνο, καθώς και μεγάλο όγκο δεδομένων για την ολοκλήρωση της διαδικασίας. Ωστόσο, μεγάλο μέρος του χρόνου δαπανάται για να μάθει το δίκτυο τα καλύτερα φίλτρα χαμηλού επιπέδου που χρησιμοποιεί για να εξάγει μοτίβα από εικόνες. Ένα φυσικό ερώτημα που προκύπτει είναι - μπορούμε να χρησιμοποιήσουμε ένα νευρωνικό δίκτυο που έχει εκπαιδευτεί σε ένα σύνολο δεδομένων και να το προσαρμόσουμε για την ταξινόμηση διαφορετικών εικόνων χωρίς να χρειαστεί πλήρης διαδικασία εκπαίδευσης;\n",
|
||||
"Η εκπαίδευση των CNN μπορεί να πάρει πολύ χρόνο, και απαιτούνται πολλά δεδομένα για αυτή τη δουλειά. Ωστόσο, μεγάλο μέρος του χρόνου δαπανάται για να μάθουμε τα καλύτερα φίλτρα χαμηλού επιπέδου που χρησιμοποιεί ένα δίκτυο για την εξαγωγή προτύπων από εικόνες. Ανακύπτει ένα φυσικό ερώτημα - μπορούμε να χρησιμοποιήσουμε ένα νευρωνικό δίκτυο εκπαιδευμένο σε ένα σύνολο δεδομένων και να το προσαρμόσουμε για ταξινόμηση διαφορετικών εικόνων χωρίς πλήρη διαδικασία εκπαίδευσης;\n",
|
||||
"\n",
|
||||
"Αυτή η προσέγγιση ονομάζεται **μεταφορά μάθησης**, επειδή μεταφέρουμε κάποια γνώση από ένα μοντέλο νευρωνικού δικτύου σε ένα άλλο. Στη μεταφορά μάθησης, συνήθως ξεκινάμε με ένα προεκπαιδευμένο μοντέλο, το οποίο έχει εκπαιδευτεί σε κάποιο μεγάλο σύνολο δεδομένων εικόνων, όπως το **ImageNet**. Αυτά τα μοντέλα μπορούν ήδη να εξάγουν αποτελεσματικά διάφορα χαρακτηριστικά από γενικές εικόνες, και σε πολλές περιπτώσεις, η απλή δημιουργία ενός ταξινομητή πάνω από αυτά τα εξαγόμενα χαρακτηριστικά μπορεί να αποδώσει καλά αποτελέσματα.\n"
|
||||
"Αυτή η προσέγγιση ονομάζεται **μεταφορά μάθησης**, επειδή μεταφέρουμε κάποια γνώση από ένα μοντέλο νευρωνικού δικτύου σε ένα άλλο. Στη μεταφορά μάθησης, συνήθως ξεκινούμε με ένα προεκπαιδευμένο μοντέλο, το οποίο έχει εκπαιδευτεί σε κάποιο μεγάλο σύνολο εικόνων, όπως το **ImageNet**. Αυτά τα μοντέλα μπορούν ήδη να κάνουν καλή δουλειά εξαγωγής διαφορετικών χαρακτηριστικών από γενικές εικόνες, και σε πολλές περιπτώσεις απλώς η δημιουργία ενός ταξινομητή πάνω σε αυτά τα εξαγόμενα χαρακτηριστικά μπορεί να αποφέρει ένα καλό αποτέλεσμα.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -29,11 +29,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Σύνολο Δεδομένων Cats vs. Dogs\n",
|
||||
"## Σύνολο Δεδομένων Γάτες vs. Σκύλοι\n",
|
||||
"\n",
|
||||
"Σε αυτή την ενότητα, θα λύσουμε ένα πραγματικό πρόβλημα ταξινόμησης εικόνων γατών και σκύλων. Για αυτόν τον σκοπό, θα χρησιμοποιήσουμε το [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), το οποίο μπορεί επίσης να ληφθεί [από τη Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
|
||||
"Σε αυτή την ενότητα, θα επιλύσουμε ένα πρόβλημα καθημερινής ζωής που αφορά την ταξινόμηση εικόνων γατών και σκύλων. Γι' αυτόν τον λόγο, θα χρησιμοποιήσουμε το [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), το οποίο μπορεί επίσης να ληφθεί [από τη Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
|
||||
"\n",
|
||||
"Ας κατεβάσουμε αυτό το σύνολο δεδομένων και ας το εξαγάγουμε στον κατάλογο `data` (αυτή η διαδικασία μπορεί να πάρει λίγο χρόνο!):\n"
|
||||
"Ας κατεβάσουμε αυτό το σύνολο δεδομένων και να το αποσυμπιέσουμε στον φάκελο `data` (αυτή η διαδικασία μπορεί να πάρει λίγο χρόνο!):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Δυστυχώς, υπάρχουν κάποια κατεστραμμένα αρχεία εικόνας στο σύνολο δεδομένων. Χρειάζεται να κάνουμε έναν γρήγορο καθαρισμό για να ελέγξουμε για κατεστραμμένα αρχεία. Για να μην επιβαρύνουμε αυτό το σεμινάριο, μεταφέραμε τον κώδικα για την επαλήθευση του συνόλου δεδομένων σε μια μονάδα.\n"
|
||||
"Δυστυχώς, υπάρχουν μερικά κατεστραμμένα αρχεία εικόνων στο σύνολο δεδομένων. Χρειαζόμαστε έναν γρήγορο καθαρισμό για να ελέγξουμε για κατεστραμμένα αρχεία. Για να μην αλλοιώσουμε αυτό το σεμινάριο, μεταφέραμε τον κώδικα επαλήθευσης του συνόλου δεδομένων σε ένα module.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -335,11 +335,11 @@
|
|||
"source": [
|
||||
"## Φόρτωση του Συνόλου Δεδομένων\n",
|
||||
"\n",
|
||||
"Σε προηγούμενα παραδείγματα, φορτώναμε σύνολα δεδομένων που είναι ενσωματωμένα στο Keras. Τώρα πρόκειται να δουλέψουμε με το δικό μας σύνολο δεδομένων, το οποίο πρέπει να φορτώσουμε από έναν κατάλογο εικόνων.\n",
|
||||
"Στα προηγούμενα παραδείγματα, φορτώναμε σύνολα δεδομένων που είναι ενσωματωμένα στο Keras. Τώρα πρόκειται να χειριστούμε το δικό μας σύνολο δεδομένων, το οποίο πρέπει να φορτωθεί από έναν κατάλογο εικόνων.\n",
|
||||
"\n",
|
||||
"Στην πραγματική ζωή, το μέγεθος των συνόλων δεδομένων εικόνων μπορεί να είναι αρκετά μεγάλο, και δεν μπορούμε να βασιζόμαστε στο ότι όλα τα δεδομένα θα χωρέσουν στη μνήμη. Έτσι, τα σύνολα δεδομένων συχνά αναπαρίστανται ως **γεννήτριες** που μπορούν να επιστρέφουν δεδομένα σε μικρές παρτίδες κατάλληλες για εκπαίδευση.\n",
|
||||
"Στην πραγματική ζωή, το μέγεθος των συνόλων δεδομένων εικόνων μπορεί να είναι αρκετά μεγάλο και δεν μπορεί κάποιος να βασιστεί στο ότι όλα τα δεδομένα μπορούν να χωρέσουν στη μνήμη. Επομένως, τα σύνολα δεδομένων συχνά αναπαριστώνται ως **γεννήτριες** που μπορούν να επιστρέφουν δεδομένα σε μικρές παρτίδες κατάλληλες για εκπαίδευση.\n",
|
||||
"\n",
|
||||
"Για να διαχειριστούμε την ταξινόμηση εικόνων, το Keras περιλαμβάνει μια ειδική συνάρτηση `image_dataset_from_directory`, η οποία μπορεί να φορτώσει εικόνες από υποκαταλόγους που αντιστοιχούν σε διαφορετικές κατηγορίες. Αυτή η συνάρτηση φροντίζει επίσης για την κλιμάκωση των εικόνων και μπορεί να διαχωρίσει το σύνολο δεδομένων σε υποσύνολα εκπαίδευσης και δοκιμής:\n"
|
||||
"Για να χειριστεί την ταξινόμηση εικόνων, το Keras περιλαμβάνει την ειδική συνάρτηση `image_dataset_from_directory`, η οποία μπορεί να φορτώσει εικόνες από υποφακέλους που αντιστοιχούν σε διαφορετικές κλάσεις. Αυτή η συνάρτηση φροντίζει επίσης το κλιμάκωμα των εικόνων και μπορεί επίσης να διαχωρίσει το σύνολο δεδομένων σε υποσύνολα εκπαίδευσης και δοκιμής:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -383,9 +383,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Είναι σημαντικό να ορίσετε την ίδια τιμή `seed` και για τις δύο κλήσεις, επειδή επηρεάζει τη διαίρεση των εικόνων μεταξύ του συνόλου εκπαίδευσης και του συνόλου δοκιμών.\n",
|
||||
"Είναι σημαντικό να ορίσετε την ίδια τιμή `seed` και για τις δύο κλήσεις, επειδή επηρεάζει τον διαχωρισμό των εικόνων μεταξύ του σετ εκπαίδευσης και του σετ δοκιμής.\n",
|
||||
"\n",
|
||||
"Το Dataset εντοπίζει αυτόματα τα ονόματα των κατηγοριών από τους φακέλους, και μπορείτε να τα αποκτήσετε αν χρειαστεί καλώντας:\n"
|
||||
"Το Dataset επιλέγει αυτόματα ονόματα κλάσεων από τους φακέλους, και μπορείτε να έχετε πρόσβαση σε αυτά αν χρειαστεί καλώντας:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Τα σύνολα δεδομένων που έχουμε αποκτήσει μπορούν να περαστούν απευθείας στη συνάρτηση `fit` για να εκπαιδεύσουν το μοντέλο. Περιέχουν τόσο τις αντίστοιχες εικόνες όσο και τις ετικέτες, οι οποίες μπορούν να επαναληφθούν χρησιμοποιώντας την ακόλουθη κατασκευή:\n"
|
||||
"Τα σετ δεδομένων που έχουμε αποκτήσει μπορούν να περαστούν απευθείας στη συνάρτηση `fit` για να εκπαιδεύσουμε το μοντέλο. Περιέχουν τόσο τις αντίστοιχες εικόνες όσο και τις ετικέτες, τα οποία μπορούν να επαναληφθούν χρησιμοποιώντας την ακόλουθη κατασκευή:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -453,7 +453,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **Σημείωση**: Όλες οι εικόνες στο σύνολο δεδομένων αναπαρίστανται ως tensors κινητής υποδιαστολής με εύρος 0-255. Πριν τις περάσουμε στο νευρωνικό δίκτυο, πρέπει να κλιμακώσουμε αυτές τις τιμές στο εύρος 0-1. Όταν σχεδιάζουμε εικόνες, είτε πρέπει να κάνουμε το ίδιο, είτε να μετατρέψουμε τις τιμές στον τύπο `int` (όπως κάνουμε στον κώδικα παραπάνω), ώστε να δείξουμε στο `matplotlib` ότι θέλουμε να σχεδιάσουμε την αρχική μη κλιμακωμένη εικόνα.\n"
|
||||
"> **Σημείωση**: Όλες οι εικόνες στο σύνολο δεδομένων αναπαρίστανται ως tensors κινητής υποδιαστολής με εύρος 0-255. Πριν τις περάσουμε στο νευρωνικό δίκτυο, πρέπει να κλιμακώσουμε αυτές τις τιμές σε εύρος 0-1. Όταν σχεδιάζουμε εικόνες, είτε πρέπει να κάνουμε το ίδιο, είτε να μετατρέψουμε τις τιμές σε τύπο `int` (όπως κάνουμε στον παραπάνω κώδικα), για να δείξουμε στο `matplotlib` ότι θέλουμε να σχεδιάσουμε την αρχική μη κλιμακωμένη εικόνα.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -462,7 +462,7 @@
|
|||
"source": [
|
||||
"## Προεκπαιδευμένα μοντέλα\n",
|
||||
"\n",
|
||||
"Για πολλές εργασίες ταξινόμησης εικόνων, μπορεί κανείς να βρει προεκπαιδευμένα μοντέλα νευρωνικών δικτύων. Πολλά από αυτά τα μοντέλα είναι διαθέσιμα μέσα στον χώρο ονομάτων `keras.applications`, και ακόμη περισσότερα μοντέλα μπορούν να βρεθούν στο Διαδίκτυο. Ας δούμε πώς μπορεί να φορτωθεί και να χρησιμοποιηθεί το απλούστερο μοντέλο VGG-16:\n"
|
||||
"Για πολλές εργασίες ταξινόμησης εικόνων μπορεί κανείς να βρει προεκπαιδευμένα μοντέλα νευρωνικών δικτύων. Πολλά από αυτά τα μοντέλα είναι διαθέσιμα μέσα στο namespace `keras.applications`, και ακόμα περισσότερα μοντέλα μπορούν να βρεθούν στο Διαδίκτυο. Ας δούμε πώς το απλούστερο μοντέλο VGG-16 μπορεί να φορτωθεί και να χρησιμοποιηθεί:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -497,7 +497,17 @@
|
|||
}
|
||||
],
|
||||
"source": [
|
||||
"vgg = keras.applications.VGG16()\n",
|
||||
"# SHA-256 of VGG16 weights (with top)\n",
|
||||
"VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n",
|
||||
"\n",
|
||||
"_weights_path = keras.utils.get_file(\n",
|
||||
" 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
|
||||
" 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
|
||||
" file_hash=VGG16_WEIGHTS_SHA256,\n",
|
||||
" hash_algorithm='sha256',\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"vgg = keras.applications.VGG16(weights=_weights_path)\n",
|
||||
"inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n",
|
||||
"\n",
|
||||
"res = vgg(inp)\n",
|
||||
|
|
@ -510,10 +520,10 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Υπάρχουν μερικά σημαντικά σημεία εδώ:\n",
|
||||
"* Πριν περάσουμε μια είσοδο σε οποιοδήποτε προ-εκπαιδευμένο δίκτυο, πρέπει να γίνει προ-επεξεργασία με έναν συγκεκριμένο τρόπο. Αυτό γίνεται καλώντας την αντίστοιχη συνάρτηση `preprocess_input`, η οποία λαμβάνει μια παρτίδα εικόνων και επιστρέφει την επεξεργασμένη μορφή τους. Στην περίπτωση του VGG-16, οι εικόνες κανονικοποιούνται και αφαιρείται κάποια προκαθορισμένη μέση τιμή για κάθε κανάλι. Αυτό συμβαίνει επειδή το VGG-16 εκπαιδεύτηκε αρχικά με αυτήν την προ-επεξεργασία.\n",
|
||||
"* Το νευρωνικό δίκτυο εφαρμόζεται στην παρτίδα εισόδου και λαμβάνουμε ως αποτέλεσμα μια παρτίδα από τανυστές 1000 στοιχείων που δείχνουν την πιθανότητα κάθε κατηγορίας. Μπορούμε να βρούμε τον αριθμό της πιο πιθανής κατηγορίας καλώντας τη συνάρτηση `argmax` σε αυτόν τον τανυστή.\n",
|
||||
"* Το αποτέλεσμα που λαμβάνεται είναι ένας [αριθμός μιας κατηγορίας του `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Για να κατανοήσουμε αυτό το αποτέλεσμα, μπορούμε επίσης να χρησιμοποιήσουμε τη συνάρτηση `decode_predictions`, η οποία επιστρέφει τις n κορυφαίες κατηγορίες μαζί με τα ονόματά τους.\n"
|
||||
"Υπάρχουν μερικά σημαντικά πράγματα εδώ:\n",
|
||||
"* Πριν δώσουμε μια είσοδο σε οποιοδήποτε προεκπαιδευμένο δίκτυο, πρέπει να υποστεί κατάλληλη προεπεξεργασία. Αυτό γίνεται καλώντας τη συναρτηση `preprocess_input`, η οποία λαμβάνει ένα πακέτο εικόνων και επιστρέφει την επεξεργασμένη μορφή τους. Στην περίπτωση του VGG-16, οι εικόνες κανονικοποιούνται και αφαιρείται μια προκαθορισμένη μέση τιμή για κάθε κανάλι. Αυτό συμβαίνει γιατί το VGG-16 εκπαιδεύτηκε αρχικά με αυτήν την προεπεξεργασία.\n",
|
||||
"* Το νευρωνικό δίκτυο εφαρμόζεται στο πακέτο εισόδου και λαμβάνουμε ως αποτέλεσμα ένα πακέτο τανυστών με 1000 στοιχεία που δείχνουν την πιθανότητα κάθε κλάσης. Μπορούμε να βρούμε τον πιο πιθανό αριθμό κλάσης καλώντας `argmax` σε αυτόν τον τανυστή.\n",
|
||||
"* Το αποτέλεσμα που λαμβάνουμε είναι [ο αριθμός μιας κλάσης `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Για να κατανοήσουμε αυτό το αποτέλεσμα, μπορούμε επίσης να χρησιμοποιήσουμε τη συνάρτηση `decode_predictions`, που επιστρέφει τις κορυφαίες n κλάσεις μαζί με τα ονόματά τους.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -599,7 +609,7 @@
|
|||
"source": [
|
||||
"## Υπολογισμοί GPU\n",
|
||||
"\n",
|
||||
"Τα βαθιά νευρωνικά δίκτυα, όπως το VGG-16 και άλλες πιο σύγχρονες αρχιτεκτονικές, απαιτούν αρκετή υπολογιστική ισχύ για να λειτουργήσουν. Έχει νόημα να χρησιμοποιηθεί επιτάχυνση GPU, εφόσον είναι διαθέσιμη. Ευτυχώς, το Keras επιταχύνει αυτόματα τους υπολογισμούς στην GPU, αν είναι διαθέσιμη. Μπορούμε να ελέγξουμε αν το Tensorflow μπορεί να χρησιμοποιήσει GPU με τον παρακάτω κώδικα:\n"
|
||||
"Τα βαθιά νευρωνικά δίκτυα, όπως το VGG-16 και άλλες πιο σύγχρονες αρχιτεκτονικές απαιτούν αρκετή υπολογιστική ισχύ για να τρέξουν. Έχει νόημα να χρησιμοποιήσουμε επιτάχυνση GPU, εάν είναι διαθέσιμη. Ευτυχώς, το Keras επιταχύνει αυτόματα τους υπολογισμούς στην GPU αν είναι διαθέσιμη. Μπορούμε να ελέγξουμε αν το Tensorflow μπορεί να χρησιμοποιήσει GPU χρησιμοποιώντας τον ακόλουθο κώδικα:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -626,9 +636,10 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"## Εξαγωγή χαρακτηριστικών VGG\n",
|
||||
"\n",
|
||||
"Αν θέλουμε να χρησιμοποιήσουμε το VGG-16 για να εξάγουμε χαρακτηριστικά από τις εικόνες μας, χρειαζόμαστε το μοντέλο χωρίς τα τελικά επίπεδα ταξινόμησης. Μπορούμε να δημιουργήσουμε το μοντέλο VGG-16 χωρίς τα ανώτερα επίπεδα χρησιμοποιώντας αυτόν τον κώδικα:\n"
|
||||
"Αν θέλουμε να χρησιμοποιήσουμε το VGG-16 για να εξάγουμε χαρακτηριστικά από τις εικόνες μας, χρειαζόμαστε το μοντέλο χωρίς τα τελικά επίπεδα ταξινόμησης. Μπορούμε να δημιουργήσουμε ένα μοντέλο VGG-16 χωρίς τα επάνω επίπεδα χρησιμοποιώντας αυτόν τον κώδικα:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -680,9 +691,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Η διάσταση του tensor χαρακτηριστικών είναι 7x7x512, αλλά για να το οπτικοποιήσουμε έπρεπε να το αναδιαμορφώσουμε σε δισδιάστατη μορφή.\n",
|
||||
"Η διάσταση του tensor χαρακτηριστικών είναι 7x7x512, αλλά για να το οπτικοποιήσουμε έπρεπε να το αναμορφώσουμε σε δισδιάστατη μορφή.\n",
|
||||
"\n",
|
||||
"Τώρα ας προσπαθήσουμε να δούμε αν αυτά τα χαρακτηριστικά μπορούν να χρησιμοποιηθούν για την ταξινόμηση εικόνων. Ας πάρουμε χειροκίνητα ένα μέρος από τις εικόνες (50 minibatches, στη δική μας περίπτωση) και να προϋπολογίσουμε τα διανύσματα χαρακτηριστικών τους. Μπορούμε να χρησιμοποιήσουμε το API **dataset** του Tensorflow για να το κάνουμε αυτό. Η συνάρτηση `map` παίρνει ένα dataset και εφαρμόζει μια δεδομένη lambda-function για να το μετασχηματίσει. Χρησιμοποιούμε αυτόν τον μηχανισμό για να κατασκευάσουμε νέα datasets, `ds_features_train` και `ds_features_test`, που περιέχουν χαρακτηριστικά εξαγόμενα από το VGG αντί για τις αρχικές εικόνες.\n"
|
||||
"Τώρα ας προσπαθήσουμε να δούμε αν αυτά τα χαρακτηριστικά μπορούν να χρησιμοποιηθούν για την ταξινόμηση εικόνων. Ας πάρουμε χειροκίνητα ένα μέρος των εικόνων (50 minibatches, στην περίπτωσή μας), και να υπολογίσουμε εκ των προτέρων τους διανύσματα χαρακτηριστικών τους. Μπορούμε να χρησιμοποιήσουμε το Tensorflow **dataset** API για αυτό. Η συνάρτηση `map` παίρνει ένα σύνολο δεδομένων και εφαρμόζει μια δοσμένη συνάρτηση λάμδα για να το μετασχηματίσει. Χρησιμοποιούμε αυτόν τον μηχανισμό για να κατασκευάσουμε νέα σύνολα δεδομένων, `ds_features_train` και `ds_features_test`, που περιέχουν χαρακτηριστικά εξαγόμενα από το VGG αντί για τις αρχικές εικόνες.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -712,9 +723,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Χρησιμοποιήσαμε την κατασκευή `.take(50)` για να περιορίσουμε το μέγεθος του συνόλου δεδομένων, ώστε να επιταχύνουμε την επίδειξή μας. Φυσικά, μπορείτε να εκτελέσετε αυτό το πείραμα στο πλήρες σύνολο δεδομένων.\n",
|
||||
"Χρησιμοποιήσαμε την κατασκευή `.take(50)` για να περιορίσουμε το μέγεθος του συνόλου δεδομένων, ώστε να επιταχύνουμε την επίδειξη μας. Φυσικά, μπορείτε να εκτελέσετε αυτό το πείραμα στο πλήρες σύνολο δεδομένων.\n",
|
||||
"\n",
|
||||
"Τώρα που έχουμε ένα σύνολο δεδομένων με εξαγόμενα χαρακτηριστικά, μπορούμε να εκπαιδεύσουμε έναν απλό πυκνό ταξινομητή για να διακρίνει μεταξύ γατών και σκύλων. Αυτό το δίκτυο θα λαμβάνει ένα διανυσματικό χαρακτηριστικό με σχήμα (7,7,512) και θα παράγει μία έξοδο που αντιστοιχεί είτε σε σκύλο είτε σε γάτα. Επειδή πρόκειται για δυαδική ταξινόμηση, χρησιμοποιούμε τη συνάρτηση ενεργοποίησης `sigmoid` και τη συνάρτηση απώλειας `binary_crossentropy`.\n"
|
||||
"Τώρα που έχουμε ένα σύνολο δεδομένων με εξαγμένες χαρακτηριστικές ιδιότητες, μπορούμε να εκπαιδεύσουμε έναν απλό πυκνό ταξινομητή για να ξεχωρίσουμε τις γάτες από τους σκύλους. Αυτό το δίκτυο θα πάρει έναν διανυσματικό χαρακτηριστικό μορφής (7,7,512) και θα παράγει μία έξοδο που αντιστοιχεί είτε σε σκύλο είτε σε γάτα. Επειδή πρόκειται για δυαδική ταξινόμηση, χρησιμοποιούμε τη συνάρτηση ενεργοποίησης `sigmoid` και τη συνάρτηση απώλειας `binary_crossentropy`.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -743,13 +754,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Το αποτέλεσμα είναι εξαιρετικό, μπορούμε να διακρίνουμε μεταξύ μιας γάτας και ενός σκύλου με σχεδόν 95% πιθανότητα! Ωστόσο, έχουμε δοκιμάσει αυτήν την προσέγγιση μόνο σε ένα υποσύνολο όλων των εικόνων, επειδή η χειροκίνητη εξαγωγή χαρακτηριστικών φαίνεται να απαιτεί πολύ χρόνο.\n",
|
||||
"Το αποτέλεσμα είναι εξαιρετικό, μπορούμε να διακρίνουμε μεταξύ γάτας και σκύλου με σχεδόν 95% πιθανότητα! Ωστόσο, έχουμε δοκιμάσει αυτήν την προσέγγιση μόνο σε ένα υποσύνολο όλων των εικόνων, επειδή η χειροκίνητη εξαγωγή χαρακτηριστικών φαίνεται να απαιτεί πολύ χρόνο.\n",
|
||||
"\n",
|
||||
"## Μεταφορά μάθησης χρησιμοποιώντας ένα δίκτυο VGG\n",
|
||||
"\n",
|
||||
"Μπορούμε επίσης να αποφύγουμε την χειροκίνητη προ-υπολογισμό των χαρακτηριστικών χρησιμοποιώντας το αρχικό δίκτυο VGG-16 στο σύνολό του κατά τη διάρκεια της εκπαίδευσης, προσθέτοντας έναν εξαγωγέα χαρακτηριστικών στο δίκτυό μας ως πρώτο επίπεδο.\n",
|
||||
"Μπορούμε επίσης να αποφύγουμε τον χειροκίνητο προϋπολογισμό των χαρακτηριστικών χρησιμοποιώντας το αρχικό δίκτυο VGG-16 ως σύνολο κατά την εκπαίδευση, προσθέτοντας έναν εξαγωγέα χαρακτηριστικών στο δίκτυό μας ως πρώτη στρώση.\n",
|
||||
"\n",
|
||||
"Η ομορφιά της αρχιτεκτονικής του Keras είναι ότι το μοντέλο VGG-16 που έχουμε ορίσει παραπάνω μπορεί επίσης να χρησιμοποιηθεί ως επίπεδο σε ένα άλλο νευρωνικό δίκτυο! Το μόνο που χρειάζεται είναι να κατασκευάσουμε ένα δίκτυο με έναν πυκνό ταξινομητή στην κορυφή του και στη συνέχεια να εκπαιδεύσουμε ολόκληρο το δίκτυο χρησιμοποιώντας οπισθοδιάδοση.\n"
|
||||
"Η ομορφιά της αρχιτεκτονικής Keras είναι ότι το μοντέλο VGG-16 που ορίσαμε παραπάνω μπορεί επίσης να χρησιμοποιηθεί ως στρώση σε ένα άλλο νευρωνικό δίκτυο! Απλά πρέπει να κατασκευάσουμε ένα δίκτυο με πυκνό ταξινομητή στην κορυφή του, και μετά να εκπαιδεύσουμε ολόκληρο το δίκτυο χρησιμοποιώντας την οπίσθια διάδοση.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -793,13 +804,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Αυτό το μοντέλο μοιάζει με ένα end-to-end δίκτυο ταξινόμησης, το οποίο λαμβάνει μια εικόνα και επιστρέφει την κατηγορία. Ωστόσο, το δύσκολο σημείο είναι ότι θέλουμε το VGG16 να λειτουργεί ως εξαγωγέας χαρακτηριστικών και όχι να επανεκπαιδευτεί. Επομένως, χρειάζεται να **παγώσουμε τα βάρη του συνελικτικού εξαγωγέα χαρακτηριστικών**. Μπορούμε να έχουμε πρόσβαση στο πρώτο επίπεδο του δικτύου καλώντας `model.layers[0]`, και απλώς πρέπει να ορίσουμε την ιδιότητα `trainable` σε `False`.\n",
|
||||
"Αυτό το μοντέλο μοιάζει με ένα δίκτυο ταξινόμησης από άκρη σε άκρη, το οποίο παίρνει μια εικόνα και επιστρέφει την κλάση. Ωστόσο, το δύσκολο σημείο είναι ότι θέλουμε το VGG16 να λειτουργεί ως εξαγωγέας χαρακτηριστικών και να μην επανεκπαιδευτεί. Έτσι, πρέπει να **παγώσουμε τα βάρη του εξαγωγέα χαρακτηριστικών συνελικτικού επιπέδου**. Μπορούμε να αποκτήσουμε πρόσβαση στο πρώτο επίπεδο του δικτύου καλώντας `model.layers[0]`, και απλώς πρέπει να ορίσουμε την ιδιότητα `trainable` σε `False`.\n",
|
||||
"\n",
|
||||
"> **Σημείωση**: Το πάγωμα των βαρών του εξαγωγέα χαρακτηριστικών είναι απαραίτητο, γιατί διαφορετικά το μη εκπαιδευμένο επίπεδο ταξινόμησης μπορεί να καταστρέψει τα αρχικά προεκπαιδευμένα βάρη του συνελικτικού εξαγωγέα.\n",
|
||||
"> **Σημείωση**: Το πάγωμα των βαρών του εξαγωγέα χαρακτηριστικών είναι απαραίτητο, διότι διαφορετικά το μη εκπαιδευμένο επίπεδο ταξινομητή μπορεί να καταστρέψει τα αρχικά προεκπαιδευμένα βάρη του συνελικτικού εξαγωγέα.\n",
|
||||
"\n",
|
||||
"Μπορείτε να παρατηρήσετε ότι ενώ ο συνολικός αριθμός παραμέτρων στο δίκτυό μας είναι περίπου 15 εκατομμύρια, εκπαιδεύουμε μόνο 25 χιλιάδες παραμέτρους. Όλες οι υπόλοιπες παράμετροι των συνελικτικών φίλτρων ανώτερου επιπέδου είναι προεκπαιδευμένες. Αυτό είναι καλό, γιατί μπορούμε να βελτιστοποιήσουμε μικρότερο αριθμό παραμέτρων με μικρότερο αριθμό παραδειγμάτων.\n",
|
||||
"Μπορείτε να παρατηρήσετε ότι ενώ ο συνολικός αριθμός παραμέτρων στο δίκτυό μας είναι περίπου 15 εκατομμύρια, εκπαιδεύουμε μόνο 25 χιλιάδες παραμέτρους. Όλες οι άλλες παράμετροι των ανώτερων συνελικτικών φίλτρων είναι προεκπαιδευμένες. Αυτό είναι καλό, γιατί μπορούμε να βελτιστοποιήσουμε μικρότερο αριθμό παραμέτρων με μικρότερο αριθμό παραδειγμάτων.\n",
|
||||
"\n",
|
||||
"Τώρα θα εκπαιδεύσουμε το δίκτυό μας και θα δούμε πόσο καλά μπορούμε να τα πάμε. Αναμένετε αρκετά μεγάλο χρόνο εκτέλεσης και μην ανησυχείτε αν η εκτέλεση φαίνεται να έχει παγώσει για κάποιο διάστημα.\n"
|
||||
"Τώρα θα εκπαιδεύσουμε το δίκτυό μας και θα δούμε πόσο καλό μπορεί να γίνει. Περιμένετε σχετικά μεγάλο χρόνο εκτέλεσης και μην ανησυχήσετε αν η εκτέλεση φαίνεται παγωμένη για λίγο.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -824,11 +835,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Φαίνεται ότι έχουμε αποκτήσει έναν αρκετά ακριβή ταξινομητή για γάτες και σκύλους!\n",
|
||||
"Φαίνεται ότι έχουμε αποκτήσει έναν σχετικά ακριβή ταξινομητή γάτων έναντι σκύλων! \n",
|
||||
"\n",
|
||||
"## Αποθήκευση και Φόρτωση του Μοντέλου\n",
|
||||
"\n",
|
||||
"Αφού εκπαιδεύσουμε το μοντέλο, μπορούμε να αποθηκεύσουμε την αρχιτεκτονική του μοντέλου και τα εκπαιδευμένα βάρη σε ένα αρχείο για μελλοντική χρήση:\n"
|
||||
"Μόλις εκπαιδεύσουμε το μοντέλο, μπορούμε να αποθηκεύσουμε την αρχιτεκτονική του μοντέλου και τα εκπαιδευμένα βάρη σε ένα αρχείο για μελλοντική χρήση:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -852,7 +863,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Μπορούμε στη συνέχεια να φορτώσουμε το μοντέλο από το αρχείο οποιαδήποτε στιγμή. Μπορεί να το βρείτε χρήσιμο σε περίπτωση που το επόμενο πείραμα καταστρέψει το μοντέλο - δεν θα χρειαστεί να ξεκινήσετε από την αρχή.\n"
|
||||
"Στη συνέχεια, μπορούμε να φορτώσουμε το μοντέλο από αρχείο οποιαδήποτε στιγμή. Μπορεί να το βρείτε χρήσιμο σε περίπτωση που το επόμενο πείραμα καταστρέψει το μοντέλο - δεν θα χρειαστεί να ξεκινήσετε πάλι από την αρχή.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -868,15 +879,15 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Fine-tuning μεταφοράς μάθησης\n",
|
||||
"## Βελτιωμένη μεταφορά μάθησης (Fine-tuning)\n",
|
||||
"\n",
|
||||
"Στην προηγούμενη ενότητα, εκπαιδεύσαμε το τελικό στρώμα ταξινόμησης για να ταξινομήσει εικόνες στο δικό μας σύνολο δεδομένων. Ωστόσο, δεν επανεκπαιδεύσαμε τον εξαγωγέα χαρακτηριστικών, και το μοντέλο μας βασίστηκε στα χαρακτηριστικά που έχει μάθει από τα δεδομένα του ImageNet. Εάν τα αντικείμενά σας διαφέρουν οπτικά από τις συνηθισμένες εικόνες του ImageNet, αυτός ο συνδυασμός χαρακτηριστικών μπορεί να μην λειτουργεί με τον καλύτερο τρόπο. Επομένως, έχει νόημα να ξεκινήσετε την εκπαίδευση και των συνελικτικών στρωμάτων.\n",
|
||||
"Στην προηγούμενη ενότητα, εκπαιδεύσαμε το τελικό επίπεδο ταξινόμησης για να ταξινομήσουμε εικόνες στο δικό μας σύνολο δεδομένων. Ωστόσο, δεν εκπαιδεύσαμε ξανά τον εξαγωγέα χαρακτηριστικών και το μοντέλο μας βασίστηκε στα χαρακτηριστικά που είχε μάθει από τα δεδομένα ImageNet. Εάν τα αντικείμενά σας διαφέρουν οπτικά από τις συνηθισμένες εικόνες ImageNet, αυτή η συνδυασμένη χρήση χαρακτηριστικών μπορεί να μην λειτουργεί καλύτερα. Επομένως, έχει νόημα να ξεκινήσουμε να εκπαιδεύουμε και τα συνελικτικά επίπεδα.\n",
|
||||
"\n",
|
||||
"Για να το κάνουμε αυτό, μπορούμε να ξεπαγώσουμε τις παραμέτρους των συνελικτικών φίλτρων που είχαμε προηγουμένως παγώσει.\n",
|
||||
"\n",
|
||||
"> **Note:** Είναι σημαντικό να παγώσετε πρώτα τις παραμέτρους και να εκτελέσετε αρκετές εποχές εκπαίδευσης για να σταθεροποιήσετε τα βάρη στο στρώμα ταξινόμησης. Εάν ξεκινήσετε αμέσως την εκπαίδευση του δικτύου από άκρη σε άκρη με ξεπαγωμένες παραμέτρους, είναι πιθανό μεγάλα σφάλματα να καταστρέψουν τα προεκπαιδευμένα βάρη στα συνελικτικά στρώματα.\n",
|
||||
"> **Σημείωση:** Είναι σημαντικό να παγώσετε πρώτα τις παραμέτρους και να πραγματοποιήσετε αρκετές εποχές εκπαίδευσης για να σταθεροποιήσετε τα βάρη στο επίπεδο ταξινόμησης. Αν ξεκινήσετε αμέσως την ολοκληρωμένη εκπαίδευση του δικτύου με τις παραμέτρους ξεπαγωμένες, μεγάλα σφάλματα είναι πιθανό να καταστρέψουν τα προεκπαιδευμένα βάρη στα συνελικτικά επίπεδα.\n",
|
||||
"\n",
|
||||
"Το συνελικτικό μοντέλο VGG-16 μας βρίσκεται μέσα στο πρώτο στρώμα και αποτελείται από πολλά στρώματα. Μπορούμε να δούμε τη δομή του:\n"
|
||||
"Το συνελικτικό μας μοντέλο VGG-16 βρίσκεται μέσα στο πρώτο στρώμα, και αποτελείται από πολλά επίπεδα. Μπορούμε να ρίξουμε μια ματιά στη δομή του:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -945,7 +956,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Μπορούμε να αποδεσμεύσουμε όλα τα επίπεδα της βάσης συνελικτικού νευρωνικού δικτύου:\n"
|
||||
"Μπορούμε να ξεπαγώσουμε όλα τα επίπεδα της συνελικτικής βάσης:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -961,7 +972,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ωστόσο, η αποδέσμευση όλων ταυτόχρονα δεν είναι η καλύτερη ιδέα. Μπορούμε πρώτα να αποδεσμεύσουμε μόνο μερικές τελικές στρώσεις συνελίξεων, επειδή περιέχουν μοτίβα υψηλότερου επιπέδου που είναι σχετικές για τις εικόνες μας. Για παράδειγμα, για αρχή, μπορούμε να παγώσουμε όλες τις στρώσεις εκτός από τις τελευταίες 4:\n"
|
||||
"Ωστόσο, το ξεπάγωμα όλων ταυτόχρονα δεν είναι η καλύτερη ιδέα. Μπορούμε πρώτα να ξεπαγώσουμε μόνο μερικά τελικά στρώματα των συνελικτικών, επειδή περιέχουν επίπεδα μοτίβα υψηλότερης τάξης που σχετίζονται με τις εικόνες μας. Για παράδειγμα, για αρχή, μπορούμε να παγώσουμε όλα τα στρώματα εκτός από τα τελευταία 4: \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1000,11 +1011,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Παρατηρήστε ότι ο αριθμός των παραμετροποιήσιμων παραμέτρων αυξήθηκε σημαντικά, αλλά παραμένει περίπου στο 50% του συνόλου των παραμέτρων.\n",
|
||||
"Παρατηρήστε ότι ο αριθμός των παραμέτρων που μπορούν να εκπαίδευσης αυξήθηκε σημαντικά, αλλά παραμένει περίπου στο 50% όλων των παραμέτρων.\n",
|
||||
"\n",
|
||||
"Μετά την αποδέσμευση, μπορούμε να κάνουμε λίγες ακόμα εποχές εκπαίδευσης (στο παράδειγμά μας, θα κάνουμε μόνο μία). Μπορείτε επίσης να επιλέξετε χαμηλότερο ρυθμό εκμάθησης, ώστε να ελαχιστοποιηθεί η επίδραση στα προκαθορισμένα βάρη. Ωστόσο, ακόμα και με χαμηλό ρυθμό εκμάθησης, μπορείτε να περιμένετε ότι η ακρίβεια θα μειωθεί στην αρχή της εκπαίδευσης, μέχρι τελικά να φτάσει σε ελαφρώς υψηλότερο επίπεδο από ό,τι στην περίπτωση των σταθερών βαρών.\n",
|
||||
"Μετά το ξεπάγωμα, μπορούμε να κάνουμε μερικούς ακόμη εποχές εκπαίδευσης (στο παράδειγμά μας, θα κάνουμε μόνο μία). Μπορείτε επίσης να επιλέξετε χαμηλότερο ρυθμό μάθησης, ώστε να ελαχιστοποιήσετε τον αντίκτυπο στους προεκπαιδευμένους βάρους. Ωστόσο, ακόμη και με χαμηλό ρυθμό μάθησης, μπορείτε να αναμένετε η ακρίβεια να μειωθεί στην αρχή της εκπαίδευσης, μέχρι τελικά να φτάσει σε ελαφρώς υψηλότερο επίπεδο από ό,τι στην περίπτωση των σταθερών βαρών.\n",
|
||||
"\n",
|
||||
"> **Σημείωση:** Αυτή η εκπαίδευση γίνεται πολύ πιο αργά, επειδή πρέπει να προωθήσουμε τα διανύσματα κλίσης πίσω από πολλά επίπεδα του δικτύου!\n"
|
||||
"> **Note:** Αυτή η εκπαίδευση γίνεται πολύ πιο αργά, επειδή πρέπει να προωθήσουμε τις κλίσεις πίσω μέσα από πολλά επίπεδα του δικτύου!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1028,9 +1039,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Είναι πιθανό να επιτύχουμε υψηλότερη ακρίβεια εκπαίδευσης, επειδή χρησιμοποιούμε ένα πιο ισχυρό δίκτυο με περισσότερες παραμέτρους, αλλά η ακρίβεια επικύρωσης δεν θα αυξηθεί το ίδιο.\n",
|
||||
"Είμαστε πιθανό να επιτύχουμε υψηλότερη ακρίβεια στην εκπαίδευση, επειδή χρησιμοποιούμε ένα πιο ισχυρό δίκτυο με περισσότερες παραμέτρους, αλλά η ακρίβεια επικύρωσης δεν θα αυξηθεί τόσο πολύ.\n",
|
||||
"\n",
|
||||
"Μη διστάσετε να ξεπαγώσετε μερικά ακόμη επίπεδα του δικτύου και να εκπαιδεύσετε περισσότερο, για να δείτε αν μπορείτε να επιτύχετε υψηλότερη ακρίβεια!\n"
|
||||
"Μη διστάσετε να ξεπαγώσετε μερικά ακόμα επίπεδα του δικτύου και να εκπαιδεύσετε περισσότερο, για να δείτε αν μπορείτε να πετύχετε υψηλότερη ακρίβεια!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1039,7 +1050,7 @@
|
|||
"source": [
|
||||
"## Άλλα μοντέλα υπολογιστικής όρασης\n",
|
||||
"\n",
|
||||
"Το VGG-16 είναι μία από τις πιο απλές αρχιτεκτονικές υπολογιστικής όρασης. Το Keras παρέχει πολλά ακόμη προεκπαιδευμένα δίκτυα. Τα πιο συχνά χρησιμοποιούμενα από αυτά είναι οι αρχιτεκτονικές **ResNet**, που αναπτύχθηκαν από τη Microsoft, και το **Inception** της Google. Για παράδειγμα, ας εξερευνήσουμε την αρχιτεκτονική του πιο απλού μοντέλου ResNet-50 (το ResNet είναι μια οικογένεια μοντέλων με διαφορετικό βάθος, μπορείτε να πειραματιστείτε με το ResNet-152 αν θέλετε να δείτε πώς μοιάζει ένα πραγματικά βαθύ μοντέλο):\n"
|
||||
"Το VGG-16 είναι μία από τις απλούστερες αρχιτεκτονικές υπολογιστικής όρασης. Το Keras παρέχει πολλές ακόμα προεκπαιδευμένες νευρωνικές δομές. Οι πιο συχνά χρησιμοποιούμενες ανάμεσά τους είναι οι αρχιτεκτονικές **ResNet**, που αναπτύχθηκαν από τη Microsoft, και το **Inception** της Google. Για παράδειγμα, ας εξερευνήσουμε την αρχιτεκτονική του απλούστερου μοντέλου ResNet-50 (το ResNet είναι μια οικογένεια μοντέλων με διαφορετικό βάθος, μπορείτε να δοκιμάσετε πειραματίζοντας με το ResNet-152 αν θέλετε να δείτε πώς είναι ένα πραγματικά βαθύ μοντέλο):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1441,11 +1452,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Όπως μπορείτε να δείτε, το μοντέλο περιέχει τα ίδια γνωστά δομικά στοιχεία: συνελικτικά επίπεδα, επίπεδα pooling και έναν τελικό πυκνό ταξινομητή. Μπορούμε να χρησιμοποιήσουμε αυτό το μοντέλο με τον ίδιο ακριβώς τρόπο που χρησιμοποιούσαμε το VGG-16 για μεταφορά μάθησης. Μπορείτε να πειραματιστείτε με τον παραπάνω κώδικα, χρησιμοποιώντας διαφορετικά μοντέλα ResNet ως βασικό μοντέλο, και να δείτε πώς αλλάζει η ακρίβεια.\n",
|
||||
"Όπως μπορείτε να δείτε, το μοντέλο περιλαμβάνει τα ίδια γνώριμα δομικά στοιχεία: συνελικτικά επίπεδα, επίπεδα συσσώρευσης και τελικό πυκνό ταξινομητή. Μπορούμε να χρησιμοποιήσουμε αυτό το μοντέλο με ακριβώς τον ίδιο τρόπο που έχουμε χρησιμοποιήσει το VGG-16 για μεταφορά μάθησης. Μπορείτε να δοκιμάσετε να πειραματιστείτε με τον κώδικα παραπάνω, χρησιμοποιώντας διαφορετικά μοντέλα ResNet ως βασικό μοντέλο, και να δείτε πώς αλλάζει η ακρίβεια.\n",
|
||||
"\n",
|
||||
"## Κανονικοποίηση Παρτίδας (Batch Normalization)\n",
|
||||
"## Κανονικοποίηση Παρτίδας\n",
|
||||
"\n",
|
||||
"Αυτό το δίκτυο περιέχει έναν ακόμη τύπο επιπέδου: **Κανονικοποίηση Παρτίδας**. Η ιδέα της κανονικοποίησης παρτίδας είναι να φέρει τις τιμές που ρέουν μέσα από το νευρωνικό δίκτυο στο σωστό εύρος. Συνήθως, τα νευρωνικά δίκτυα λειτουργούν καλύτερα όταν όλες οι τιμές βρίσκονται στο εύρος [-1,1] ή [0,1], και γι' αυτόν τον λόγο κλιμακώνουμε/κανονικοποιούμε τα δεδομένα εισόδου μας αναλόγως. Ωστόσο, κατά την εκπαίδευση ενός βαθιού δικτύου, μπορεί να συμβεί οι τιμές να βγουν σημαντικά εκτός αυτού του εύρους, κάτι που καθιστά την εκπαίδευση προβληματική. Το επίπεδο κανονικοποίησης παρτίδας υπολογίζει τον μέσο όρο και την τυπική απόκλιση για όλες τις τιμές της τρέχουσας παρτίδας (minibatch) και τις χρησιμοποιεί για να κανονικοποιήσει το σήμα πριν το περάσει μέσα από ένα επίπεδο του νευρωνικού δικτύου. Αυτό βελτιώνει σημαντικά τη σταθερότητα των βαθιών δικτύων.\n"
|
||||
"Αυτό το δίκτυο περιέχει έναν ακόμα τύπο επιπέδου: **Κανονικοποίηση Παρτίδας**. Η ιδέα της κανονικοποίησης παρτίδας είναι να μεταφέρει τις τιμές που ρέουν μέσω του νευρωνικού δικτύου σε ένα σωστό διάστημα. Συνήθως τα νευρωνικά δίκτυα δουλεύουν καλύτερα όταν όλες οι τιμές βρίσκονται εντός του εύρους [-1,1] ή [0,1], και αυτός είναι ο λόγος που κλιμακώνουμε/κανονικοποιούμε τα δεδομένα εισόδου μας κατάλληλα. Ωστόσο, κατά την εκπαίδευση ενός βαθιού δικτύου, μπορεί να συμβεί οι τιμές να ξεφεύγουν σημαντικά από αυτό το εύρος, κάτι που κάνει την εκπαίδευση προβληματική. Το επίπεδο κανονικοποίησης παρτίδας υπολογίζει το μέσο όρο και την τυπική απόκλιση για όλες τις τιμές της τρέχουσας μικροπαρτίδας, και τα χρησιμοποιεί για να κανονικοποιήσει το σήμα πριν το περάσει μέσω ενός επιπέδου του νευρωνικού δικτύου. Αυτό βελτιώνει σημαντικά τη σταθερότητα των βαθιών δικτύων.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1454,16 +1465,16 @@
|
|||
"source": [
|
||||
"## Συμπέρασμα\n",
|
||||
"\n",
|
||||
"Χρησιμοποιώντας τη μεταφορά μάθησης, καταφέραμε να δημιουργήσουμε γρήγορα έναν ταξινομητή για την προσαρμοσμένη εργασία ταξινόμησης αντικειμένων μας και να επιτύχουμε υψηλή ακρίβεια. Ωστόσο, αυτό το παράδειγμα δεν ήταν απόλυτα δίκαιο, καθώς το αρχικό δίκτυο VGG-16 είχε προεκπαιδευτεί για την αναγνώριση γατών και σκύλων, και έτσι απλώς επαναχρησιμοποιούσαμε τα περισσότερα μοτίβα που υπήρχαν ήδη στο δίκτυο. Μπορείτε να περιμένετε χαμηλότερη ακρίβεια σε πιο εξειδικευμένα αντικείμενα, όπως λεπτομέρειες σε γραμμή παραγωγής σε ένα εργοστάσιο ή διαφορετικά φύλλα δέντρων.\n",
|
||||
"Χρησιμοποιώντας μεταφορά μάθησης, καταφέραμε γρήγορα να δημιουργήσουμε έναν ταξινομητή για τον προσαρμοσμένο μας στόχο ταξινόμησης αντικειμένων και να επιτύχουμε υψηλή ακρίβεια. Ωστόσο, αυτό το παράδειγμα δεν ήταν εντελώς δίκαιο, επειδή το αρχικό δίκτυο VGG-16 είχε προεκπαιδευτεί για να αναγνωρίζει γάτες και σκύλους, και επομένως απλώς ξαναχρησιμοποιήσαμε τα περισσότερα από τα μοτίβα που ήταν ήδη παρόντα στο δίκτυο. Μπορείτε να περιμένετε χαμηλότερη ακρίβεια σε πιο εξωτικά αντικείμενα ειδικού τομέα, όπως λεπτομέρειες στη γραμμή παραγωγής σε ένα εργοστάσιο ή διαφορετικά φύλλα δέντρων.\n",
|
||||
"\n",
|
||||
"Μπορείτε να δείτε ότι πιο σύνθετες εργασίες που επιλύουμε τώρα απαιτούν μεγαλύτερη υπολογιστική ισχύ και δεν μπορούν να λυθούν εύκολα με τη χρήση CPU. Στην επόμενη ενότητα, θα προσπαθήσουμε να χρησιμοποιήσουμε μια πιο ελαφριά υλοποίηση για να εκπαιδεύσουμε το ίδιο μοντέλο με χαμηλότερους υπολογιστικούς πόρους, κάτι που οδηγεί σε ελαφρώς χαμηλότερη ακρίβεια.\n"
|
||||
"Μπορείτε να δείτε ότι πιο σύνθετα καθήκοντα που επιλύουμε τώρα απαιτούν μεγαλύτερη υπολογιστική ισχύ και δεν μπορούν να λυθούν εύκολα στην CPU. Στην επόμενη ενότητα, θα προσπαθήσουμε να χρησιμοποιήσουμε μια πιο ελαφριά υλοποίηση για να εκπαιδεύσουμε το ίδιο μοντέλο χρησιμοποιώντας λιγότερους υπολογιστικούς πόρους, που έχει ως αποτέλεσμα ελαφρώς χαμηλότερη ακρίβεια.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Αποποίηση ευθύνης**: \nΑυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.\n"
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Αποποίηση ευθυνών**:\nΑυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1484,12 +1495,6 @@
|
|||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.10"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "c189abc107848f96051085cc30945129",
|
||||
"translation_date": "2025-08-29T09:50:16+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
|
||||
"language_code": "el"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
|
|
|||
|
|
@ -1,34 +1,34 @@
|
|||
# Επεξεργασία Φυσικής Γλώσσας
|
||||
|
||||

|
||||

|
||||
|
||||
Σε αυτή την ενότητα, θα επικεντρωθούμε στη χρήση Νευρωνικών Δικτύων για την αντιμετώπιση εργασιών που σχετίζονται με την **Επεξεργασία Φυσικής Γλώσσας (NLP)**. Υπάρχουν πολλά προβλήματα NLP που θέλουμε οι υπολογιστές να μπορούν να λύσουν:
|
||||
Σε αυτήν την ενότητα, θα επικεντρωθούμε στη χρήση Νευρωνικών Δικτύων για την αντιμετώπιση εργασιών που σχετίζονται με την **Επεξεργασία Φυσικής Γλώσσας (NLP)**. Υπάρχουν πολλά προβλήματα NLP που θέλουμε οι υπολογιστές να μπορούν να λύσουν:
|
||||
|
||||
* **Ταξινόμηση κειμένου** είναι ένα τυπικό πρόβλημα ταξινόμησης που αφορά ακολουθίες κειμένου. Παραδείγματα περιλαμβάνουν την ταξινόμηση μηνυμάτων ηλεκτρονικού ταχυδρομείου ως ανεπιθύμητα ή μη, ή την κατηγοριοποίηση άρθρων ως αθλητικά, επιχειρηματικά, πολιτικά κ.λπ. Επίσης, κατά την ανάπτυξη chat bots, συχνά χρειάζεται να κατανοήσουμε τι θέλει να πει ένας χρήστης — σε αυτή την περίπτωση ασχολούμαστε με την **ταξινόμηση πρόθεσης**. Συχνά, στην ταξινόμηση πρόθεσης πρέπει να αντιμετωπίσουμε πολλές κατηγορίες.
|
||||
* **Ανάλυση συναισθήματος** είναι ένα τυπικό πρόβλημα παλινδρόμησης, όπου πρέπει να αποδώσουμε έναν αριθμό (ένα συναίσθημα) που αντιστοιχεί στο πόσο θετικό/αρνητικό είναι το νόημα μιας πρότασης. Μια πιο προχωρημένη έκδοση της ανάλυσης συναισθήματος είναι η **ανάλυση συναισθήματος βάσει πτυχών** (ABSA), όπου αποδίδουμε συναίσθημα όχι σε ολόκληρη την πρόταση, αλλά σε διαφορετικά μέρη της (πτυχές), π.χ. *Σε αυτό το εστιατόριο, μου άρεσε η κουζίνα, αλλά η ατμόσφαιρα ήταν απαίσια*.
|
||||
* **Αναγνώριση Ονομαστικών Οντοτήτων** (NER) αναφέρεται στο πρόβλημα εξαγωγής συγκεκριμένων οντοτήτων από κείμενο. Για παράδειγμα, μπορεί να χρειαστεί να κατανοήσουμε ότι στη φράση *Πρέπει να πετάξω στο Παρίσι αύριο* η λέξη *αύριο* αναφέρεται σε ΗΜΕΡΟΜΗΝΙΑ, και το *Παρίσι* είναι ΤΟΠΟΘΕΣΙΑ.
|
||||
* **Εξαγωγή λέξεων-κλειδιών** είναι παρόμοια με το NER, αλλά πρέπει να εξάγουμε λέξεις σημαντικές για το νόημα της πρότασης αυτόματα, χωρίς προεκπαίδευση για συγκεκριμένους τύπους οντοτήτων.
|
||||
* **Κατάταξη κειμένου** είναι ένα τυπικό πρόβλημα ταξινόμησης που αφορά σειρές κειμένου. Παραδείγματα περιλαμβάνουν την ταξινόμηση μηνυμάτων ηλεκτρονικού ταχυδρομείου ως ανεπιθύμητα (spam) ή όχι, ή την κατηγοριοποίηση άρθρων ως αθλητικά, επιχειρήσεις, πολιτική, κ.λπ. Επίσης, όταν αναπτύσσουμε chat bots, συχνά πρέπει να κατανοήσουμε τι ήθελε να πει ο χρήστης – σε αυτή την περίπτωση ασχολούμαστε με την **ταξινόμηση προθέσεων**. Συχνά, στην ταξινόμηση προθέσεων πρέπει να διαχειριστούμε πολλές κατηγορίες.
|
||||
* **Ανάλυση συναισθήματος** είναι ένα τυπικό πρόβλημα παλινδρόμησης, όπου πρέπει να αποδοθεί ένας αριθμός (ένα συναίσθημα) που αντιστοιχεί στο πόσο θετικό/αρνητικό είναι το νόημα μιας πρότασης. Μια πιο προχωρημένη μορφή ανάλυσης συναισθήματος είναι η **ανάλυση συναισθήματος βάσει πτυχών** (ABSA), όπου το συναίσθημα αποδίδεται όχι σε ολόκληρη την πρόταση αλλά σε διαφορετικά τμήματά της (πτυχές), π.χ. *Σε αυτό το εστιατόριο μου άρεσε η κουζίνα, αλλά η ατμόσφαιρα ήταν απαίσια*.
|
||||
* **Αναγνώριση Οντοτήτων με Όνομα** (NER) αναφέρεται στο πρόβλημα της εξαγωγής ορισμένων οντοτήτων από το κείμενο. Για παράδειγμα, μπορεί να χρειαστεί να κατανοήσουμε ότι στη φράση *Πρέπει να πετάξω στο Παρίσι αύριο* η λέξη *αύριο* αναφέρεται σε ΗΜΕΡΟΜΗΝΙΑ, και το *Παρίσι* είναι ΤΟΠΟΘΕΣΙΑ.
|
||||
* **Εξαγωγή λέξεων-κλειδιών** είναι παρόμοια με την NER, αλλά πρέπει να εξάγουμε λέξεις σημαντικές για το νόημα της πρότασης αυτόματα, χωρίς προεκπαίδευση για συγκεκριμένους τύπους οντοτήτων.
|
||||
* **Ομαδοποίηση κειμένου** μπορεί να είναι χρήσιμη όταν θέλουμε να ομαδοποιήσουμε παρόμοιες προτάσεις, για παράδειγμα, παρόμοια αιτήματα σε συνομιλίες τεχνικής υποστήριξης.
|
||||
* **Απάντηση σε ερωτήσεις** αναφέρεται στην ικανότητα ενός μοντέλου να απαντήσει σε μια συγκεκριμένη ερώτηση. Το μοντέλο λαμβάνει ένα κείμενο και μια ερώτηση ως εισόδους, και πρέπει να παρέχει ένα σημείο στο κείμενο όπου περιέχεται η απάντηση στην ερώτηση (ή, μερικές φορές, να δημιουργήσει το κείμενο της απάντησης).
|
||||
* **Δημιουργία κειμένου** είναι η ικανότητα ενός μοντέλου να δημιουργεί νέο κείμενο. Μπορεί να θεωρηθεί ως εργασία ταξινόμησης που προβλέπει το επόμενο γράμμα/λέξη βάσει κάποιου *προτροπής κειμένου*. Προχωρημένα μοντέλα δημιουργίας κειμένου, όπως το GPT-3, είναι ικανά να λύσουν άλλες εργασίες NLP χρησιμοποιώντας μια τεχνική που ονομάζεται [προγραμματισμός προτροπών](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) ή [μηχανική προτροπών](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29).
|
||||
* **Περίληψη κειμένου** είναι μια τεχνική όταν θέλουμε ένας υπολογιστής να "διαβάσει" μεγάλο κείμενο και να το συνοψίσει σε λίγες προτάσεις.
|
||||
* **Μετάφραση κειμένου** μπορεί να θεωρηθεί ως συνδυασμός κατανόησης κειμένου σε μία γλώσσα και δημιουργίας κειμένου σε άλλη.
|
||||
* **Απάντηση σε ερωτήσεις** αναφέρεται στην ικανότητα ενός μοντέλου να απαντά σε συγκεκριμένη ερώτηση. Το μοντέλο λαμβάνει ως είσοδο ένα κομμάτι κειμένου και μια ερώτηση, και πρέπει να δώσει μια θέση στο κείμενο όπου περιέχεται η απάντηση στην ερώτηση (ή, μερικές φορές, να παράγει το κείμενο της απάντησης).
|
||||
* **Γεννήτρια κειμένου** είναι η ικανότητα ενός μοντέλου να παράγει νέο κείμενο. Μπορεί να θεωρηθεί ως πρόβλημα ταξινόμησης που προβλέπει το επόμενο γράμμα/λέξη βασιζόμενο σε κάποιο *προτροπή κειμένου*. Προχωρημένα μοντέλα παραγωγής κειμένου, όπως το GPT-3, μπορούν να λύσουν και άλλα προβλήματα NLP όπως ταξινόμηση χρησιμοποιώντας μία τεχνική που ονομάζεται [προγραμματισμός προτροπών](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) ή [μηχανική των προτροπών](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)
|
||||
* **Περίληψη κειμένου** είναι μια τεχνική όταν θέλουμε ο υπολογιστής να "διαβάσει" μακρύ κείμενο και να το συνοψίσει σε λίγες προτάσεις.
|
||||
* **Μηχανική μετάφραση** μπορεί να θεωρηθεί ως συνδυασμός κατανόησης κειμένου σε μια γλώσσα και παραγωγής κειμένου σε μια άλλη.
|
||||
|
||||
Αρχικά, οι περισσότερες εργασίες NLP λύνονταν με παραδοσιακές μεθόδους όπως γραμματικές. Για παράδειγμα, στη μετάφραση κειμένου χρησιμοποιούνταν αναλυτές για τη μετατροπή της αρχικής πρότασης σε ένα συντακτικό δέντρο, στη συνέχεια εξάγονταν υψηλότερες σημασιολογικές δομές για την αναπαράσταση του νοήματος της πρότασης, και βάσει αυτού του νοήματος και της γραμματικής της γλώσσας στόχου παράγονταν τα αποτελέσματα. Σήμερα, πολλές εργασίες NLP λύνονται πιο αποτελεσματικά με τη χρήση νευρωνικών δικτύων.
|
||||
Αρχικά, οι περισσότερες εργασίες NLP λύνονταν χρησιμοποιώντας παραδοσιακές μεθόδους όπως γραμματικές. Για παράδειγμα, στη μηχανική μετάφραση χρησιμοποιούνταν αναλυτές (parsers) για να μετατρέψουν την αρχική πρόταση σε δέντρο σύνταξης, στη συνέχεια εξάγονταν υψηλού επιπέδου σημασιολογικές δομές για να αναπαραστήσουν το νόημα της πρότασης, και με βάση αυτό το νόημα και τη γραμματική της γλώσσας στόχου, γινόταν η παραγωγή του αποτελέσματος. Σήμερα, πολλές εργασίες NLP λύνονται πιο αποτελεσματικά χρησιμοποιώντας νευρωνικά δίκτυα.
|
||||
|
||||
> Πολλές κλασικές μέθοδοι NLP υλοποιούνται στη βιβλιοθήκη Python [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Υπάρχει ένα εξαιρετικό [Βιβλίο NLTK](https://www.nltk.org/book/) διαθέσιμο online που καλύπτει πώς μπορούν να λυθούν διάφορες εργασίες NLP χρησιμοποιώντας το NLTK.
|
||||
> Πολλές κλασικές μέθοδοι NLP υλοποιούνται στην Python βιβλιοθήκη [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Υπάρχει ένα εξαιρετικό [βιβλίο NLTK](https://www.nltk.org/book/) διαθέσιμο online που καλύπτει το πώς διάφορες εργασίες NLP μπορούν να λυθούν χρησιμοποιώντας το NLTK.
|
||||
|
||||
Στο μάθημά μας, θα επικεντρωθούμε κυρίως στη χρήση Νευρωνικών Δικτύων για NLP, και θα χρησιμοποιήσουμε το NLTK όπου χρειάζεται.
|
||||
Στο μάθημά μας, θα επικεντρωθούμε κυρίως στη χρήση νευρωνικών δικτύων για NLP, και θα χρησιμοποιούμε το NLTK όπου χρειάζεται.
|
||||
|
||||
Έχουμε ήδη μάθει για τη χρήση νευρωνικών δικτύων για την αντιμετώπιση δεδομένων πίνακα και εικόνων. Η κύρια διαφορά μεταξύ αυτών των τύπων δεδομένων και του κειμένου είναι ότι το κείμενο είναι μια ακολουθία μεταβλητού μήκους, ενώ το μέγεθος εισόδου στην περίπτωση των εικόνων είναι γνωστό εκ των προτέρων. Ενώ τα συνελικτικά δίκτυα μπορούν να εξάγουν μοτίβα από δεδομένα εισόδου, τα μοτίβα στο κείμενο είναι πιο περίπλοκα. Π.χ., μπορούμε να έχουμε άρνηση που διαχωρίζεται από το υποκείμενο με αυθαίρετο αριθμό λέξεων (π.χ. *Δεν μου αρέσουν τα πορτοκάλια*, έναντι *Δεν μου αρέσουν αυτά τα μεγάλα πολύχρωμα νόστιμα πορτοκάλια*), και αυτό πρέπει να ερμηνευθεί ως ένα μοτίβο. Έτσι, για να χειριστούμε τη γλώσσα, πρέπει να εισαγάγουμε νέους τύπους νευρωνικών δικτύων, όπως *επαναληπτικά δίκτυα* και *μετασχηματιστές*.
|
||||
Έχουμε ήδη μάθει για τη χρήση νευρωνικών δικτύων στην επεξεργασία πίνακα δεδομένων και εικόνων. Η βασική διαφορά μεταξύ αυτών των τύπων δεδομένων και του κειμένου είναι ότι το κείμενο είναι μια ακολουθία μεταβλητού μήκους, ενώ το μέγεθος της εισόδου στην περίπτωση των εικόνων είναι γνωστό εκ των προτέρων. Ενώ τα συνελικτικά δίκτυα μπορούν να εξάγουν μοτίβα από τα δεδομένα εισόδου, τα μοτίβα στο κείμενο είναι πιο σύνθετα. Π.χ., η άρνηση μπορεί να βρίσκεται μακριά από το υποκείμενο με αυθαίρετο αριθμό λέξεων (π.χ. *Δεν μου αρέσουν οι πορτοκάλια* vs. *Δεν μου αρέσουν αυτά τα μεγάλα χρωματιστά νόστιμα πορτοκάλια*), και αυτό πρέπει να ερμηνευτεί ως ένα μοτίβο. Έτσι, για να διαχειριστούμε τη γλώσσα πρέπει να εισάγουμε νέους τύπους νευρωνικών δικτύων, όπως *επαναλαμβανόμενα δίκτυα* και *μετασχηματιστές*.
|
||||
|
||||
## Εγκατάσταση Βιβλιοθηκών
|
||||
|
||||
Αν χρησιμοποιείτε τοπική εγκατάσταση Python για να εκτελέσετε αυτό το μάθημα, ίσως χρειαστεί να εγκαταστήσετε όλες τις απαιτούμενες βιβλιοθήκες για NLP χρησιμοποιώντας τις παρακάτω εντολές:
|
||||
Εάν χρησιμοποιείτε τοπική εγκατάσταση Python για να εκτελέσετε αυτό το μάθημα, ίσως χρειαστεί να εγκαταστήσετε όλες τις απαιτούμενες βιβλιοθήκες για NLP χρησιμοποιώντας τις ακόλουθες εντολές:
|
||||
|
||||
**Για PyTorch**
|
||||
```bash
|
||||
pip install -r requirements-torch.txt
|
||||
pip install -r requirements-pytorch.txt
|
||||
```
|
||||
**Για TensorFlow**
|
||||
```bash
|
||||
|
|
@ -39,13 +39,13 @@ pip install -r requirements-tf.txt
|
|||
|
||||
## Προειδοποίηση GPU
|
||||
|
||||
Σε αυτή την ενότητα, σε ορισμένα παραδείγματα θα εκπαιδεύσουμε αρκετά μεγάλα μοντέλα.
|
||||
* **Χρησιμοποιήστε Υπολογιστή με GPU**: Συνιστάται να εκτελείτε τα σημειωματάριά σας σε υπολογιστή με GPU για να μειώσετε τους χρόνους αναμονής κατά την εργασία με μεγάλα μοντέλα.
|
||||
* **Περιορισμοί Μνήμης GPU**: Η εκτέλεση σε GPU μπορεί να οδηγήσει σε καταστάσεις όπου εξαντλείται η μνήμη GPU, ειδικά κατά την εκπαίδευση μεγάλων μοντέλων.
|
||||
* **Κατανάλωση Μνήμης GPU**: Η ποσότητα μνήμης GPU που καταναλώνεται κατά την εκπαίδευση εξαρτάται από διάφορους παράγοντες, συμπεριλαμβανομένου του μεγέθους του minibatch.
|
||||
* **Ελαχιστοποίηση Μεγέθους Minibatch**: Αν αντιμετωπίσετε προβλήματα μνήμης GPU, σκεφτείτε να μειώσετε το μέγεθος του minibatch στον κώδικά σας ως πιθανή λύση.
|
||||
* **Απελευθέρωση Μνήμης GPU στο TensorFlow**: Παλαιότερες εκδόσεις του TensorFlow μπορεί να μην απελευθερώνουν σωστά τη μνήμη GPU κατά την εκπαίδευση πολλών μοντέλων μέσα σε έναν πυρήνα Python. Για να διαχειριστείτε αποτελεσματικά τη χρήση μνήμης GPU, μπορείτε να ρυθμίσετε το TensorFlow ώστε να δεσμεύει μνήμη GPU μόνο όταν χρειάζεται.
|
||||
* **Ενσωμάτωση Κώδικα**: Για να ρυθμίσετε το TensorFlow ώστε να αυξάνει τη δέσμευση μνήμης GPU μόνο όταν απαιτείται, συμπεριλάβετε τον παρακάτω κώδικα στα σημειωματάριά σας:
|
||||
Σε αυτήν την ενότητα, σε ορισμένα από τα παραδείγματα θα εκπαιδεύουμε αρκετά μεγάλα μοντέλα.
|
||||
* **Χρησιμοποιήστε υπολογιστή με υποστήριξη GPU**: Συνιστάται να εκτελείτε τα τετράδιά σας σε υπολογιστή με υποστήριξη GPU για να μειώσετε τους χρόνους αναμονής όταν δουλεύετε με μεγάλα μοντέλα.
|
||||
* **Περιορισμοί μνήμης GPU**: Η εκτέλεση σε GPU μπορεί να οδηγήσει σε καταστάσεις όπου εξαντλείται η μνήμη της GPU, ειδικά όταν εκπαιδεύονται μεγάλα μοντέλα.
|
||||
* **Κατανάλωση μνήμης GPU**: Η ποσότητα μνήμης GPU που καταναλώνεται κατά την εκπαίδευση εξαρτάται από διάφορους παράγοντες, συμπεριλαμβανομένου του μεγέθους του minibatch.
|
||||
* **Μείωση μεγέθους minibatch**: Αν αντιμετωπίσετε προβλήματα μνήμης GPU, σκεφτείτε να μειώσετε το μέγεθος του minibatch στον κώδικά σας ως πιθανή λύση.
|
||||
* **Αποδέσμευση μνήμης GPU στο TensorFlow**: Παλαιότερες εκδόσεις του TensorFlow ίσως δεν απελευθερώνουν σωστά τη μνήμη GPU όταν εκπαιδεύονται πολλαπλά μοντέλα μέσα σε έναν Python πυρήνα. Για να διαχειριστείτε αποτελεσματικά τη μνήμη GPU, μπορείτε να διαμορφώσετε το TensorFlow ώστε να δεσμεύει μνήμη GPU μόνο όταν χρειάζεται.
|
||||
* **Συμπερίληψη κώδικα**: Για να ορίσετε το TensorFlow να αυξάνει τη δέσμευση μνήμης GPU μόνο όταν απαιτείται, συμπεριλάβετε τον ακόλουθο κώδικα στα τετράδιά σας:
|
||||
|
||||
```python
|
||||
physical_devices = tf.config.list_physical_devices('GPU')
|
||||
|
|
@ -53,19 +53,21 @@ if len(physical_devices)>0:
|
|||
tf.config.experimental.set_memory_growth(physical_devices[0], True)
|
||||
```
|
||||
|
||||
Αν ενδιαφέρεστε να μάθετε για το NLP από την κλασική προοπτική ML, επισκεφθείτε [αυτή τη σειρά μαθημάτων](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
|
||||
Αν σας ενδιαφέρει να μάθετε για NLP από μια κλασική οπτική της Μηχανικής Μάθησης, επισκεφθείτε [αυτή τη συλλογή μαθημάτων](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
|
||||
|
||||
## Σε αυτή την Ενότητα
|
||||
Σε αυτή την ενότητα θα μάθουμε για:
|
||||
Σε αυτήν την ενότητα θα μάθουμε για:
|
||||
|
||||
* [Αναπαράσταση κειμένου ως τανυστές](13-TextRep/README.md)
|
||||
* [Αναπαράσταση κειμένου ως τάνσορες](13-TextRep/README.md)
|
||||
* [Ενσωματώσεις λέξεων](14-Emdeddings/README.md)
|
||||
* [Μοντελοποίηση γλώσσας](15-LanguageModeling/README.md)
|
||||
* [Επαναληπτικά Νευρωνικά Δίκτυα](16-RNN/README.md)
|
||||
* [Δίκτυα Γεννήτριας](17-GenerativeNetworks/README.md)
|
||||
* [Επαναλαμβανόμενα νευρωνικά δίκτυα](16-RNN/README.md)
|
||||
* [Γενετικά δίκτυα](17-GenerativeNetworks/README.md)
|
||||
* [Μετασχηματιστές](18-Transformers/README.md)
|
||||
|
||||
---
|
||||
|
||||
**Αποποίηση Ευθύνης**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Αποποίηση ευθυνών**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,38 +1,38 @@
|
|||
# Πολυπρακτορικά Συστήματα
|
||||
# Συστήματα Πολλαπλών Πρακτόρων
|
||||
|
||||
Ένας από τους πιθανούς τρόπους επίτευξης νοημοσύνης είναι η λεγόμενη **αναδυόμενη** (ή **συνεργιστική**) προσέγγιση, η οποία βασίζεται στο γεγονός ότι η συνδυασμένη συμπεριφορά πολλών σχετικά απλών πρακτόρων μπορεί να οδηγήσει σε πιο σύνθετη (ή ευφυή) συμπεριφορά του συστήματος συνολικά. Θεωρητικά, αυτό βασίζεται στις αρχές της [Συλλογικής Νοημοσύνης](https://en.wikipedia.org/wiki/Collective_intelligence), του [Αναδυτισμού](https://en.wikipedia.org/wiki/Global_brain) και της [Εξελικτικής Κυβερνητικής](https://en.wikipedia.org/wiki/Global_brain), που υποστηρίζουν ότι τα συστήματα ανώτερου επιπέδου αποκτούν κάποια προστιθέμενη αξία όταν συνδυάζονται σωστά από συστήματα κατώτερου επιπέδου (η λεγόμενη *αρχή της μετάβασης μετασυστήματος*).
|
||||
Μία από τις πιθανές μεθόδους επίτευξης νοημοσύνης είναι η λεγόμενη **αναδυόμενη** (ή **συνεργατική**) προσέγγιση, η οποία βασίζεται στο γεγονός ότι η συνδυασμένη συμπεριφορά πολλών σχετικά απλών πρακτόρων μπορεί να οδηγήσει σε μία συνολικά πιο σύνθετη (ή ευφυή) συμπεριφορά του συστήματος ως σύνολο. Θεωρητικά, αυτό βασίζεται στις αρχές της [Συλλογικής Νοημοσύνης](https://en.wikipedia.org/wiki/Collective_intelligence), της [Αναδυόμενης Θεωρίας](https://en.wikipedia.org/wiki/Global_brain) και της [Εξελικτικής Κυβερνητικής](https://en.wikipedia.org/wiki/Global_brain), οι οποίες δηλώνουν ότι συστήματα υψηλότερου επιπέδου αποκτούν κάποιο είδος πρόσθετης αξίας όταν συνδυάζονται σωστά από συστήματα χαμηλότερου επιπέδου (το λεγόμενο *αρχή της μετάβασης μεταξύ συστημάτων*).
|
||||
|
||||
## [Κουίζ πριν τη διάλεξη](https://ff-quizzes.netlify.app/en/ai/quiz/45)
|
||||
## [Προ-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ai/quiz/45)
|
||||
|
||||
Η κατεύθυνση των **Πολυπρακτορικών Συστημάτων** εμφανίστηκε στην Τεχνητή Νοημοσύνη τη δεκαετία του 1990 ως απάντηση στην ανάπτυξη του Διαδικτύου και των κατανεμημένων συστημάτων. Ένα από τα κλασικά εγχειρίδια Τεχνητής Νοημοσύνης, το [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), εστιάζει στην κλασική Τεχνητή Νοημοσύνη από την οπτική των Πολυπρακτορικών Συστημάτων.
|
||||
Η κατεύθυνση των **Συστημάτων Πολλαπλών Πρακτόρων** εμφανίστηκε στην Τεχνητή Νοημοσύνη τη δεκαετία του 1990 ως απάντηση στην ανάπτυξη του Διαδικτύου και των κατανεμημένων συστημάτων. Ένα από τα κλασικά εγχειρίδια ΤΝ, [Τεχνητή Νοημοσύνη: Μια Σύγχρονη Προσέγγιση](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), εστιάζει στην όψη της κλασικής ΤΝ από την πλευρά των Συστημάτων Πολλαπλών Πρακτόρων.
|
||||
|
||||
Κεντρική έννοια στην πολυπρακτορική προσέγγιση είναι η έννοια του **Πράκτορα** - μιας οντότητας που ζει σε κάποιο **περιβάλλον**, το οποίο μπορεί να αντιλαμβάνεται και να επενεργεί σε αυτό. Αυτή είναι μια πολύ ευρεία έννοια, και μπορεί να υπάρχουν πολλοί διαφορετικοί τύποι και ταξινομήσεις πρακτόρων:
|
||||
Κεντρικό στην προσέγγιση πολλαπλών πρακτόρων είναι η έννοια του **Πράκτορα** - μιας οντότητας που ζει σε κάποιο **περιβάλλον**, το οποίο μπορεί να αντιλαμβάνεται και να επηρεάζει. Πρόκειται για έναν πολύ ευρύ ορισμό, και μπορεί να υπάρξουν πολλοί διαφορετικοί τύποι και ταξινομήσεις πρακτόρων:
|
||||
|
||||
* Με βάση την ικανότητά τους να συλλογίζονται:
|
||||
- **Αντιδραστικοί** πράκτορες έχουν συνήθως απλή συμπεριφορά τύπου αίτησης-απάντησης
|
||||
- **Στοχαστικοί** πράκτορες χρησιμοποιούν κάποια μορφή λογικής συλλογιστικής ή/και ικανότητες σχεδιασμού
|
||||
* Με βάση τον τόπο εκτέλεσης του κώδικα του πράκτορα:
|
||||
- **Στατικοί** πράκτορες λειτουργούν σε έναν αφιερωμένο κόμβο δικτύου
|
||||
- **Κινητοί** πράκτορες μπορούν να μετακινούν τον κώδικά τους μεταξύ κόμβων δικτύου
|
||||
* Με βάση τη συμπεριφορά τους:
|
||||
- **Παθητικοί πράκτορες** δεν έχουν συγκεκριμένους στόχους. Μπορούν να αντιδρούν σε εξωτερικά ερεθίσματα, αλλά δεν θα ξεκινήσουν δράσεις από μόνοι τους.
|
||||
- **Ενεργοί πράκτορες** έχουν κάποιους στόχους που επιδιώκουν
|
||||
- **Γνωστικοί πράκτορες** περιλαμβάνουν σύνθετο σχεδιασμό και συλλογιστική
|
||||
* Αναλόγως της ικανότητάς τους να συλλογίζονται:
|
||||
- **Αντιδραστικοί** πράκτορες έχουν συνήθως απλή συμπεριφορά τύπου αίτημα-απάντησης
|
||||
- **Στοχαστικοί** πράκτορες χρησιμοποιούν κάποιο είδος λογικής σκέψης και/ή σχεδιασμού
|
||||
* Αναλόγως του τόπου εκτέλεσης του κώδικα πρακτορα:
|
||||
- **Στατικοί** πράκτορες εργάζονται σε έναν αφιερωμένο κόμβο δικτύου
|
||||
- **Κινητοί** πράκτορες μπορούν να μεταφέρουν τον κώδικά τους μεταξύ κόμβων δικτύου
|
||||
* Αναλόγως της συμπεριφοράς τους:
|
||||
- **Παθητικοί πράκτορες** δεν έχουν συγκεκριμένους στόχους. Τέτοιοι πράκτορες μπορούν να αντιδρούν σε εξωτερικά ερεθίσματα, αλλά δεν θα ξεκινήσουν δράσεις από μόνοι τους.
|
||||
- **Ενεργητικοί πράκτορες** έχουν κάποιους στόχους που επιδιώκουν
|
||||
- **Γνωστικοί πράκτορες** εμπλέκουν σύνθετο σχεδιασμό και σκέψη
|
||||
|
||||
Τα πολυπρακτορικά συστήματα χρησιμοποιούνται σήμερα σε πολλές εφαρμογές:
|
||||
Τα συστήματα πολλαπλών πρακτόρων χρησιμοποιούνται σήμερα σε μια σειρά από εφαρμογές:
|
||||
|
||||
* Στα παιχνίδια, πολλοί χαρακτήρες που δεν ελέγχονται από τον παίκτη χρησιμοποιούν κάποια μορφή Τεχνητής Νοημοσύνης και μπορούν να θεωρηθούν ευφυείς πράκτορες
|
||||
* Στην παραγωγή βίντεο, η απόδοση σύνθετων 3D σκηνών που περιλαμβάνουν πλήθη γίνεται συνήθως με προσομοίωση πολυπρακτορικών συστημάτων
|
||||
* Στη μοντελοποίηση συστημάτων, η πολυπρακτορική προσέγγιση χρησιμοποιείται για την προσομοίωση της συμπεριφοράς ενός σύνθετου μοντέλου. Για παράδειγμα, η πολυπρακτορική προσέγγιση έχει χρησιμοποιηθεί με επιτυχία για την πρόβλεψη της εξάπλωσης της νόσου COVID-19 παγκοσμίως. Παρόμοια προσέγγιση μπορεί να χρησιμοποιηθεί για τη μοντελοποίηση της κυκλοφορίας στην πόλη και την παρακολούθηση της αντίδρασής της σε αλλαγές στους κανόνες κυκλοφορίας.
|
||||
* Σε σύνθετα αυτοματοποιημένα συστήματα, κάθε συσκευή μπορεί να λειτουργεί ως ανεξάρτητος πράκτορας, καθιστώντας το σύστημα συνολικά λιγότερο μονολιθικό και πιο ανθεκτικό.
|
||||
* Σε παιχνίδια, πολλοί μη-παίκτες χαρακτήρες χρησιμοποιούν κάποιο είδος ΤΝ, και μπορεί να θεωρηθούν ως ευφυείς πράκτορες
|
||||
* Στην παραγωγή βίντεο, η απεικόνιση σύνθετων 3D σκηνών με πλήθη γίνεται συνήθως με πολυπρακτορική προσομοίωση
|
||||
* Στην μοντελοποίηση συστημάτων, η πολυπρακτορική προσέγγιση χρησιμοποιείται για την προσομοίωση συμπεριφοράς ενός σύνθετου μοντέλου. Για παράδειγμα, έχει χρησιμοποιηθεί επιτυχώς για την πρόβλεψη της εξάπλωσης της νόσου COVID-19 παγκοσμίως. Παρόμοια προσέγγιση μπορεί να χρησιμοποιηθεί για μοντελοποίηση της κυκλοφορίας στην πόλη και να δούμε πώς αυτή αντιδρά στις αλλαγές των κανόνων κυκλοφορίας.
|
||||
* Σε σύνθετα συστήματα αυτοματισμού, κάθε συσκευή μπορεί να λειτουργεί ως ανεξάρτητος πράκτορας, κάνοντας το σύστημα συνολικά λιγότερο μονολιθικό και πιο ανθεκτικό.
|
||||
|
||||
Δεν θα αφιερώσουμε πολύ χρόνο για να εμβαθύνουμε στα πολυπρακτορικά συστήματα, αλλά θα εξετάσουμε ένα παράδειγμα **Πολυπρακτορικής Μοντελοποίησης**.
|
||||
Δεν θα αφιερώσουμε πολύ χρόνο σε βάθος στα συστήματα πολλαπλών πρακτόρων, αλλά θα εξετάσουμε ένα παράδειγμα **Πολυπρακτορικής Μοντελοποίησης**.
|
||||
|
||||
## NetLogo
|
||||
|
||||
Το [NetLogo](https://ccl.northwestern.edu/netlogo/) είναι ένα περιβάλλον πολυπρακτορικής μοντελοποίησης βασισμένο σε μια τροποποιημένη έκδοση της γλώσσας προγραμματισμού [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)). Αυτή η γλώσσα αναπτύχθηκε για τη διδασκαλία εννοιών προγραμματισμού σε παιδιά και σας επιτρέπει να ελέγχετε έναν πράκτορα που ονομάζεται **χελώνα**, η οποία μπορεί να κινείται αφήνοντας ένα ίχνος πίσω της. Αυτό επιτρέπει τη δημιουργία σύνθετων γεωμετρικών σχημάτων, που αποτελεί έναν πολύ οπτικό τρόπο κατανόησης της συμπεριφοράς ενός πράκτορα.
|
||||
Το [NetLogo](https://ccl.northwestern.edu/netlogo/) είναι ένα περιβάλλον πολυπρακτορικής μοντελοποίησης βασισμένο σε τροποποιημένη έκδοση της γλώσσας προγραμματισμού [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)). Αυτή η γλώσσα αναπτύχθηκε για τη διδασκαλία προγραμματισμού σε παιδιά, και επιτρέπει τον έλεγχο ενός πράκτορα που ονομάζεται **χελώνα**, ο οποίος μπορεί να κινείται αφήνοντας ίχνος. Αυτό επιτρέπει τη δημιουργία σύνθετων γεωμετρικών σχημάτων, που είναι ένας πολύ οπτικός τρόπος κατανόησης της συμπεριφοράς ενός πράκτορα.
|
||||
|
||||
Στο NetLogo, μπορούμε να δημιουργήσουμε πολλές χελώνες χρησιμοποιώντας την εντολή `create-turtles`. Στη συνέχεια, μπορούμε να δώσουμε εντολές σε όλες τις χελώνες να εκτελέσουν κάποιες ενέργειες (στο παρακάτω παράδειγμα - να κινηθούν 10 σημεία μπροστά):
|
||||
Στο NetLogo, μπορούμε να δημιουργήσουμε πολλές χελώνες χρησιμοποιώντας την εντολή `create-turtles`. Στη συνέχεια μπορούμε να δώσουμε εντολές σε όλες τις χελώνες να κάνουν κάποιες ενέργειες (στο παράδειγμα παρακάτω - διάβα 10 βήματα μπροστά):
|
||||
|
||||
```
|
||||
create-turtles 10
|
||||
|
|
@ -41,39 +41,39 @@ ask turtles [
|
|||
]
|
||||
```
|
||||
|
||||
Φυσικά, δεν είναι ενδιαφέρον όταν όλες οι χελώνες κάνουν το ίδιο πράγμα, οπότε μπορούμε να `ask` ομάδες χελωνών, π.χ. εκείνες που βρίσκονται κοντά σε ένα συγκεκριμένο σημείο. Μπορούμε επίσης να δημιουργήσουμε χελώνες διαφορετικών *φυλών* χρησιμοποιώντας την εντολή `breed [cats cat]`. Εδώ το `cat` είναι το όνομα της φυλής, και πρέπει να καθορίσουμε τόσο τη μοναδική όσο και την πληθυντική μορφή της λέξης, επειδή διαφορετικές εντολές χρησιμοποιούν διαφορετικές μορφές για λόγους σαφήνειας.
|
||||
Φυσικά, δεν είναι ενδιαφέρον όταν όλες οι χελώνες κάνουν το ίδιο πράγμα, οπότε μπορούμε να `ζητήσουμε` ομάδες χελωνών, π.χ. αυτές που βρίσκονται κοντά σε ένα συγκεκριμένο σημείο. Μπορούμε επίσης να δημιουργήσουμε χελώνες διαφορετικών *φυλών* χρησιμοποιώντας την εντολή `breed [cats cat]`. Εδώ το `cat` είναι το όνομα μιας φυλής, και πρέπει να προσδιορίσουμε τόσο τον ενικό όσο και τον πληθυντικό, επειδή διαφορετικές εντολές χρησιμοποιούν διαφορετικές μορφές για λόγους σαφήνειας.
|
||||
|
||||
> ✅ Δεν θα εμβαθύνουμε στη γλώσσα NetLogo - μπορείτε να επισκεφθείτε τον εξαιρετικό [Διαδραστικό Λεξικό NetLogo για Αρχάριους](https://ccl.northwestern.edu/netlogo/bind/) αν θέλετε να μάθετε περισσότερα.
|
||||
> ✅ Δεν θα εισέλθουμε στην εκμάθηση της γλώσσας NetLogo καθαυτής - μπορείτε να επισκεφθείτε τον εξαιρετικό πόρο [Αλληλεπιδραστικό Λεξικό NetLogo για Αρχάριους](https://ccl.northwestern.edu/netlogo/bind/) αν ενδιαφέρεστε να μάθετε περισσότερα.
|
||||
|
||||
Μπορείτε να [κατεβάσετε](https://ccl.northwestern.edu/netlogo/download.shtml) και να εγκαταστήσετε το NetLogo για να το δοκιμάσετε.
|
||||
|
||||
### Βιβλιοθήκη Μοντέλων
|
||||
|
||||
Ένα εξαιρετικό χαρακτηριστικό του NetLogo είναι ότι περιέχει μια βιβλιοθήκη έτοιμων μοντέλων που μπορείτε να δοκιμάσετε. Μεταβείτε στο **File → Models Library**, και θα βρείτε πολλές κατηγορίες μοντέλων για να επιλέξετε.
|
||||
Ένα ωραίο χαρακτηριστικό του NetLogo είναι ότι περιέχει μια βιβλιοθήκη λειτουργικών μοντέλων που μπορείτε να δοκιμάσετε. Μεταβείτε στο **File → Models Library**, και θα βρείτε πολλές κατηγορίες μοντέλων για επιλογή.
|
||||
|
||||
<img alt="Βιβλιοθήκη Μοντέλων NetLogo" src="../../../../../translated_images/el/NetLogo-ModelLib.efe023afb4763c05.webp" width="60%"/>
|
||||
|
||||
> Στιγμιότυπο οθόνης της βιβλιοθήκης μοντέλων από τον Dmitry Soshnikov
|
||||
> Ένα στιγμιότυπο της βιβλιοθήκης μοντέλων από τον Dmitry Soshnikov
|
||||
|
||||
Μπορείτε να ανοίξετε ένα από τα μοντέλα, για παράδειγμα **Biology → Flocking**.
|
||||
|
||||
### Κύριες Αρχές
|
||||
|
||||
Αφού ανοίξετε το μοντέλο, μεταφέρεστε στην κύρια οθόνη του NetLogo. Εδώ είναι ένα δείγμα μοντέλου που περιγράφει τον πληθυσμό λύκων και προβάτων, δεδομένων πεπερασμένων πόρων (γρασίδι).
|
||||
Μετά το άνοιγμα του μοντέλου, μεταφέρεστε στην κύρια οθόνη NetLogo. Ακολουθεί ένα δείγμα μοντέλου που περιγράφει τον πληθυσμό λύκων και προβάτων, με δεδομένους πεπερασμένους πόρους (χλόη).
|
||||
|
||||

|
||||
|
||||
> Στιγμιότυπο οθόνης από τον Dmitry Soshnikov
|
||||
|
||||
Σε αυτή την οθόνη, μπορείτε να δείτε:
|
||||
Σε αυτήν την οθόνη, μπορείτε να δείτε:
|
||||
|
||||
* Την ενότητα **Interface**, η οποία περιέχει:
|
||||
* Το τμήμα **Διεπαφής** που περιέχει:
|
||||
- Το κύριο πεδίο, όπου ζουν όλοι οι πράκτορες
|
||||
- Διάφορα χειριστήρια: κουμπιά, ρυθμιστικά κ.λπ.
|
||||
- Γραφήματα που μπορείτε να χρησιμοποιήσετε για να εμφανίσετε παραμέτρους της προσομοίωσης
|
||||
* Την καρτέλα **Code**, η οποία περιέχει τον επεξεργαστή, όπου μπορείτε να πληκτρολογήσετε πρόγραμμα NetLogo
|
||||
- Διάφορους ελέγχους: κουμπιά, ρυθμιστικά, κλπ.
|
||||
- Γραφήματα που μπορείτε να χρησιμοποιήσετε για την εμφάνιση παραμέτρων της προσομοίωσης
|
||||
* Την καρτέλα **Κώδικα** που περιέχει τον επεξεργαστή, όπου μπορείτε να πληκτρολογήσετε πρόγραμμα NetLogo
|
||||
|
||||
Στις περισσότερες περιπτώσεις, η διεπαφή θα έχει ένα κουμπί **Setup**, το οποίο αρχικοποιεί την κατάσταση της προσομοίωσης, και ένα κουμπί **Go** που ξεκινά την εκτέλεση. Αυτά χειρίζονται οι αντίστοιχοι χειριστές στον κώδικα που μοιάζουν ως εξής:
|
||||
Στις περισσότερες περιπτώσεις, η διεπαφή έχει ένα κουμπί **Setup**, που αρχικοποιεί την κατάσταση της προσομοίωσης, και ένα κουμπί **Go** που ξεκινά την εκτέλεση. Αυτά χειρίζονται οι αντίστοιχοι χειριστές στον κώδικα που μοιάζουν ως εξής:
|
||||
|
||||
```
|
||||
to go [
|
||||
|
|
@ -81,48 +81,79 @@ to go [
|
|||
]
|
||||
```
|
||||
|
||||
Ο κόσμος του NetLogo αποτελείται από τα εξής αντικείμενα:
|
||||
Ο κόσμος του NetLogo αποτελείται από τα παρακάτω αντικείμενα:
|
||||
|
||||
* **Πράκτορες** (χελώνες) που μπορούν να κινούνται στο πεδίο και να κάνουν κάτι. Δίνετε εντολές στους πράκτορες χρησιμοποιώντας τη σύνταξη `ask turtles [...]`, και ο κώδικας στις αγκύλες εκτελείται από όλους τους πράκτορες σε *λειτουργία χελώνας*.
|
||||
* **Κομμάτια** είναι τετράγωνα τμήματα του πεδίου, πάνω στα οποία ζουν οι πράκτορες. Μπορείτε να αναφέρεστε σε όλους τους πράκτορες στο ίδιο κομμάτι ή να αλλάζετε τα χρώματα και άλλες ιδιότητες των κομματιών. Μπορείτε επίσης να `ask patches` να κάνουν κάτι.
|
||||
* **Παρατηρητής** είναι ένας μοναδικός πράκτορας που ελέγχει τον κόσμο. Όλοι οι χειριστές κουμπιών εκτελούνται σε *λειτουργία παρατηρητή*.
|
||||
* **Πράκτορες** (χελώνες) που μπορούν να κινηθούν σε όλο το πεδίο και να κάνουν κάτι. Δίνετε εντολές σε πράκτορες χρησιμοποιώντας τη σύνταξη `ask turtles [...]`, και ο κώδικας στις παρενθέσεις εκτελείται από όλους τους πράκτορες σε *λειτουργία χελώνας*.
|
||||
* **Πατσέτες** είναι τετράγωνες περιοχές του πεδίου, όπου ζουν οι πράκτορες. Μπορείτε να αναφερθείτε σε όλους τους πράκτορες στην ίδια πατσέτα, ή να αλλάξετε τα χρώματα των πατσέτων και άλλες ιδιότητες. Μπορείτε επίσης να `ask patches` να κάνουν κάτι.
|
||||
* Ο **Παρατηρητής** είναι ένας μοναδικός πράκτορας που ελέγχει τον κόσμο. Όλοι οι χειριστές κουμπιών εκτελούνται σε *λειτουργία παρατηρητή*.
|
||||
|
||||
> ✅ Η ομορφιά ενός πολυπρακτορικού περιβάλλοντος είναι ότι ο κώδικας που εκτελείται σε λειτουργία χελώνας ή κομματιού εκτελείται ταυτόχρονα από όλους τους πράκτορες παράλληλα. Έτσι, γράφοντας λίγο κώδικα και προγραμματίζοντας τη συμπεριφορά ενός μεμονωμένου πράκτορα, μπορείτε να δημιουργήσετε σύνθετη συμπεριφορά του συστήματος προσομοίωσης συνολικά.
|
||||
> ✅ Η ωραιότητα ενός περιβάλλοντος πολλαπλών πρακτόρων είναι ότι ο κώδικας που τρέχει σε λειτουργία χελώνας ή πατσέτας εκτελείται ταυτόχρονα από όλους τους πράκτορες παράλληλα. Έτσι, γράφοντας λίγες γραμμές κώδικα και προγραμματίζοντας τη συμπεριφορά ενός μεμονωμένου πράκτορα, μπορείτε να δημιουργήσετε σύνθετη συμπεριφορά του συστήματος προσομοίωσης συνολικά.
|
||||
|
||||
### Συμπεριφορά Σμήνους
|
||||
### Flocking
|
||||
|
||||
Ως παράδειγμα πολυπρακτορικής συμπεριφοράς, ας εξετάσουμε τη **[Συμπεριφορά Σμήνους](https://en.wikipedia.org/wiki/Flocking_(behavior))**. Η συμπεριφορά σμήνους είναι ένα σύνθετο μοτίβο που μοιάζει πολύ με τον τρόπο που πετούν τα σμήνη πουλιών. Παρατηρώντας τα να πετούν, μπορεί να σκεφτείτε ότι ακολουθούν κάποιο είδος συλλογικού αλγορίθμου ή ότι διαθέτουν κάποια μορφή *συλλογικής νοημοσύνης*. Ωστόσο, αυτή η σύνθετη συμπεριφορά προκύπτει όταν κάθε μεμονωμένος πράκτορας (σε αυτή την περίπτωση, ένα *πουλί*) παρατηρεί μόνο κάποιους άλλους πράκτορες σε μικρή απόσταση από αυτό και ακολουθεί τρεις απλούς κανόνες:
|
||||
Ως παράδειγμα πολυπρακτορικής συμπεριφοράς, ας εξετάσουμε το **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))**. Το Flocking είναι ένα σύνθετο μοτίβο που μοιάζει πολύ με το πώς πετούν οι σμήνη πουλιών. Βλέποντάς τα να πετούν μπορεί να σκεφτείτε ότι ακολουθούν κάποιο είδος συλλογικού αλγόριθμου, ή ότι κατέχουν κάποια μορφή *συλλογικής νοημοσύνης*. Ωστόσο, αυτή η σύνθετη συμπεριφορά εμφανίζεται όταν κάθε μεμονωμένος πράκτορας (σε αυτή την περίπτωση, ένα *πουλί*) παρατηρεί μόνο κάποιους άλλους πράκτορες σε μικρή απόσταση από αυτό και ακολουθεί τρεις απλούς κανόνες:
|
||||
|
||||
* **Ευθυγράμμιση** - κατευθύνεται προς τη μέση κατεύθυνση των γειτονικών πρακτόρων
|
||||
* **Συνοχή** - προσπαθεί να κατευθυνθεί προς τη μέση θέση των γειτόνων (*έλξη μακράς εμβέλειας*)
|
||||
* **Διαχωρισμός** - όταν πλησιάζει πολύ άλλα πουλιά, προσπαθεί να απομακρυνθεί (*απώθηση μικρής εμβέλειας*)
|
||||
* **Ευθυγράμμιση** - στρέφεται προς τη μέση κατεύθυνση των γειτονικών πρακτόρων
|
||||
* **Συσπείρωση** - προσπαθεί να στρέφεται προς τη μέση θέση των γειτόνων (*ελκτική δύναμη μακρυά*)
|
||||
* **Απόσταση** - όταν πλησιάζει πολύ άλλα πουλιά, προσπαθεί να απομακρυνθεί (*απωθητική δύναμη κοντά*)
|
||||
|
||||
Μπορείτε να εκτελέσετε το παράδειγμα συμπεριφοράς σμήνους και να παρατηρήσετε τη συμπεριφορά. Μπορείτε επίσης να προσαρμόσετε παραμέτρους, όπως τον *βαθμό διαχωρισμού* ή την *εμβέλεια ορατότητας*, που καθορίζει πόσο μακριά μπορεί να δει κάθε πουλί. Σημειώστε ότι αν μειώσετε την εμβέλεια ορατότητας στο 0, όλα τα πουλιά γίνονται τυφλά και η συμπεριφορά σμήνους σταματά. Αν μειώσετε τον διαχωρισμό στο 0, όλα τα πουλιά συγκεντρώνονται σε μια ευθεία γραμμή.
|
||||
Μπορείτε να τρέξετε το παράδειγμα flocking και να παρατηρήσετε τη συμπεριφορά. Μπορείτε επίσης να ρυθμίσετε παραμέτρους, όπως το *βαθμό απομάκρυνσης*, ή το *πεδίο οπτικής*, που ορίζει πόσο μακριά βλέπει κάθε πουλί. Σημειώστε ότι αν μειώσετε το πεδίο οπτικής στο 0, όλα τα πουλιά γίνονται τυφλά και το flocking σταματά. Αν μειώσετε την απομάκρυνση στο 0, όλα τα πουλιά μαζεύονται σε μία ευθεία γραμμή.
|
||||
|
||||
> ✅ Μεταβείτε στην καρτέλα **Code** και δείτε πού υλοποιούνται οι τρεις κανόνες της συμπεριφοράς σμήνους (ευθυγράμμιση, συνοχή και διαχωρισμός) στον κώδικα. Σημειώστε πώς αναφερόμαστε μόνο σε εκείνους τους πράκτορες που βρίσκονται εντός ορατότητας.
|
||||
> ✅ Μεταβείτε στην καρτέλα **Κώδικας** και δείτε πού οι τρεις κανόνες flocking (ευθυγράμμιση, συσπείρωση και απόσταση) υλοποιούνται στον κώδικα. Προσεξτε πως αναφερόμαστε μόνο σε εκείνους τους πράκτορες που είναι ορατοί.
|
||||
|
||||
### Άλλα Μοντέλα για Εξερεύνηση
|
||||
### Άλλα μοντέλα για να δείτε
|
||||
|
||||
Υπάρχουν μερικά ακόμη ενδιαφέροντα μοντέλα που μπορείτε να πειραματιστείτε:
|
||||
Υπάρχουν μερικά ακόμη ενδιαφέροντα μοντέλα με τα οποία μπορείτε να πειραματιστείτε:
|
||||
|
||||
* **Art → Fireworks** δείχνει πώς ένα πυροτέχνημα μπορεί να θεωρηθεί συλλογική συμπεριφορά μεμονωμένων ρευμάτων φωτιάς
|
||||
* **Social Science → Traffic Basic** και **Social Science → Traffic Grid** δείχνουν το μοντέλο κυκλοφορίας πόλης σε 1D και 2D πλέγμα με ή χωρίς φανάρια. Κάθε αυτοκίνητο στην προσομοίωση ακολουθεί τους εξής κανόνες:
|
||||
- Αν ο χώρος μπροστά του είναι κενός - επιταχύνει (μέχρι μια συγκεκριμένη μέγιστη ταχύτητα)
|
||||
- Αν βλέπει εμπόδιο μπροστά - φρενάρει (και μπορείτε να προσαρμόσετε πόσο μακριά μπορεί να δει ο οδηγός)
|
||||
* **Art → Fireworks** δείχνει πώς ένα πυροτέχνημα μπορεί να θεωρηθεί συλλογική συμπεριφορά ατομικών ρευμάτων φωτιάς
|
||||
* **Social Science → Traffic Basic** και **Social Science → Traffic Grid** δείχνουν το μοντέλο της κυκλοφορίας στην πόλη σε 1Δ και 2Δ πλέγμα με ή χωρίς φανάρια. Κάθε αυτοκίνητο στην προσομοίωση ακολουθεί τους παρακάτω κανόνες:
|
||||
- Αν ο χώρος μπροστά του είναι ελεύθερος - επιταχύνει (μέχρι μια μέγιστη ταχύτητα)
|
||||
- Αν βλέπει εμπόδιο μπροστά - φρενάρει (και μπορείτε να ρυθμίσετε πόσο μακριά βλέπει ο οδηγός)
|
||||
* **Social Science → Party** δείχνει πώς οι άνθρωποι συγκεντρώνονται κατά τη διάρκεια ενός κοκτέιλ πάρτι. Μπορείτε να βρείτε τον συνδυασμό παραμέτρων που οδηγεί στη γρηγορότερη αύξηση της ευτυχίας της ομάδας.
|
||||
|
||||
Όπως βλέπετε από αυτά τα παραδείγματα, οι πολυπρακτορικές προσομοιώσεις μπορούν να είναι ένας πολύ χρήσιμος τρόπος για να κατανοήσουμε τη συμπεριφορά ενός σύνθετου συστήματος που αποτελείται από άτομα που ακολουθούν την ίδια ή παρόμοια λογική. Μπορεί επίσης να χρησιμοποιηθεί για τον έλεγχο εικονικών πρακτόρων, όπως [NPCs](https://en.wikipedia.org/wiki/NPC) σε παιχνίδια υπολογιστή ή πρακτόρων σε 3D κόσμους κινουμένων σχεδίων.
|
||||
Όπως βλέπετε από αυτά τα παραδείγματα, οι πολυπρακτορικές προσομοιώσεις μπορούν να είναι ένα αρκετά χρήσιμο εργαλείο για την κατανόηση της συμπεριφοράς ενός πολύπλοκου συστήματος που αποτελείται από άτομα που ακολουθούν την ίδια ή παρόμοια λογική. Μπορεί επίσης να χρησιμοποιηθεί για τον έλεγχο εικονικών πρακτόρων, όπως [NPCs](https://en.wikipedia.org/wiki/NPC) σε βιντεοπαιχνίδια, ή πρακτόρων σε 3D κινούμενους κόσμους.
|
||||
|
||||
## Στοχαστικοί Πράκτορες
|
||||
|
||||
Οι πράκτορες που περιγράφηκαν παραπάνω είναι πολύ απλοί, αντιδρώντας σε αλλαγές στο περιβάλλον χρησιμοποιώντας κάποιο είδος αλγορίθμου. Ως εκ τούτου, είναι **αντιδραστικοί πράκτορες**. Ωστόσο, μερικές φορές οι πράκτορες μπορούν να συλλογίζονται και να σχεδιάζουν τις ενέργειές τους, οπότε ονομάζονται **στοχαστικοί**.
|
||||
Οι πράκτορες που περιγράφηκαν παραπάνω είναι πολύ απλοί, αντιδρώντας σε αλλαγές στο περιβάλλον με κάποιο είδος αλγορίθμου. Ως τέτοιοι είναι **αντιδραστικοί πράκτορες**. Ωστόσο, μερικές φορές οι πράκτορες μπορούν να συλλογιστούν και να σχεδιάσουν τις ενέργειές τους, οπότε ονομάζονται **στοχαστικοί**.
|
||||
|
||||
Ένα τυπικό παράδειγμα θα ήταν ένας προσωπικός πράκτορας που λαμβάνει μια εντολή από έναν άνθρωπο να κλείσει ένα πακέτο διακοπών. Υποθέστε ότι υπάρχουν πολλοί πράκτορες που ζουν στο διαδίκτυο και μπορούν να τον βοηθήσουν. Θα πρέπει τότε να επικοινωνήσει με άλλους πράκτορες για να δει ποιες πτήσεις είναι διαθέσιμες, ποιες είναι οι τιμές των ξενοδοχείων για διαφορετικές ημερομηνίες και να προσπαθήσει να διαπραγματευτεί την καλύτερη τιμή. Όταν το σχέδιο διακοπών ολοκληρωθεί και επιβεβαιωθεί από τον ιδιοκτήτη, μπορεί να προχωρήσει στην κράτηση.
|
||||
Ένα τυπικό παράδειγμα θα ήταν ένας προσωπικός πράκτορας που λαμβάνει οδηγία από έναν άνθρωπο να κλείσει ένα τουριστικό ταξίδι. Υποθέστε ότι υπάρχουν πολλοί πράκτορες στο διαδίκτυο που μπορούν να τον βοηθήσουν. Τότε θα πρέπει να επικοινωνήσει με άλλους πράκτορες για να δει ποιες πτήσεις είναι διαθέσιμες, ποιες είναι οι τιμές ξενοδοχείων για διάφορες ημερομηνίες, και να προσπαθήσει να διαπραγματευτεί την καλύτερη τιμή. Όταν το σχέδιο διακοπών ολοκληρωθεί και επιβεβαιωθεί από τον ιδιοκτήτη, μπορεί να προχωρήσει στην κράτηση.
|
||||
|
||||
Για να το κάνει αυτό, οι πράκτορες πρέπει να **επικοινωνούν**. Για επιτυχημένη επικοινωνία χρειάζονται:
|
||||
Για να το κάνει αυτό, οι πράκτορες πρέπει να **επικοινωνούν**. Για να πετύχουν αποτελεσματική επικοινωνία χρειάζονται:
|
||||
|
||||
* Κάποιες **τυποποιημένες γλώσσες για την ανταλλαγή γνώσης**, όπως [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) και [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). Αυτές οι γλώσσες σχεδιάζονται με βάση τη [Θεωρία Πράξεων Ομιλίας](https://en.wikipedia.org/wiki/Speech_act).
|
||||
* Αυτές οι γλώσσες πρέπει επίσης να περιλαμβάνουν κάποιες **πρωτόκολλες για
|
||||
* Κάποιες **τυποποιημένες γλώσσες ανταλλαγής γνώσης**, όπως η [Γλώσσα Ανταλλαγής Γνώσης](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) και η [Γλώσσα Ερωτημάτων και Διαχείρισης Γνώσης](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). Αυτές οι γλώσσες έχουν σχεδιαστεί με βάση τη [θεωρία των ενεργειών λόγου](https://en.wikipedia.org/wiki/Speech_act).
|
||||
* Αυτές οι γλώσσες θα πρέπει επίσης να περιλαμβάνουν κάποια **πρωτόκολλα διαπραγμάτευσης**, βασισμένα σε διαφορετικά **είδη δημοπρασίας**.
|
||||
* Μία **κοινή οντολογία** να χρησιμοποιούν, έτσι ώστε να αναφέρονται στις ίδιες έννοιες γνωρίζοντας τη σημασία τους
|
||||
* Έναν τρόπο να **ανακαλύπτουν** τι μπορεί να κάνει κάθε διαφορετικός πράκτορας, επίσης βάσει κάποιας μορφής οντολογίας
|
||||
|
||||
Οι στοχαστικοί πράκτορες είναι πολύ πιο σύνθετοι από τους αντιδραστικούς, επειδή όχι μόνο αντιδρούν σε αλλαγές στο περιβάλλον, αλλά θα πρέπει επίσης να μπορούν να *ξεκινήσουν* ενέργειες. Μία από τις προτεινόμενες αρχιτεκτονικές για στοχαστικούς πράκτορες είναι ο λεγόμενος πράκτορας Πίστη-Επιθυμία-Πρόθεση (BDI):
|
||||
|
||||
* Οι **Πιστεύεις** σχηματίζουν ένα σύνολο γνώσης για το περιβάλλον ενός πράκτορα. Μπορεί να είναι δομημένες ως βάση γνώσης ή σύνολο κανόνων που ένας πράκτορας μπορεί να εφαρμόσει σε μια συγκεκριμένη κατάσταση στο περιβάλλον.
|
||||
* Οι **Επιθυμίες** ορίζουν τι θέλει να κάνει ένας πράκτορας, δηλαδή τους στόχους του. Για παράδειγμα, ο στόχος του βοηθητικού πράκτορα προσωπικού παραπάνω είναι να κλείσει μια εκδρομή, και ο στόχος ενός πράκτορα ξενοδοχείου είναι να μεγιστοποιήσει το κέρδος.
|
||||
* Οι **Προθέσεις** είναι συγκεκριμένες ενέργειες που σχεδιάζει να κάνει ο πράκτορας για να επιτύχει τους στόχους του. Οι ενέργειες τυπικά αλλάζουν το περιβάλλον και προκαλούν επικοινωνία με άλλους πράκτορες.
|
||||
|
||||
Υπάρχουν πλατφόρμες διαθέσιμες για την κατασκευή συστημάτων πολλαπλών πρακτόρων, όπως το [JADE](https://jade.tilab.com/). [Αυτό το άρθρο](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) περιέχει ανασκόπηση πλατφορμών πολλαπλών πρακτόρων, μαζί με μια σύντομη ιστορία των συστημάτων πολλαπλών πρακτόρων και των διαφόρων σεναρίων χρήσης τους.
|
||||
|
||||
## Συμπέρασμα
|
||||
|
||||
Τα συστήματα πολλαπλών πρακτόρων μπορούν να πάρουν πολύ διαφορετικές μορφές και να χρησιμοποιηθούν σε πολλές διαφορετικές εφαρμογές.
|
||||
Όλα συγκλίνουν στο να εστιάζουν στη λιγότερο σύνθετη συμπεριφορά ενός μεμονωμένου πράκτορα, και να επιτυγχάνουν πιο σύνθετη συμπεριφορά του συνολικού συστήματος λόγω **συνεργιστικού αποτελέσματος**.
|
||||
|
||||
## 🚀 Πρόκληση
|
||||
|
||||
Πάρτε αυτό το μάθημα στην πραγματική ζωή και δοκιμάστε να εννοιολογήσετε ένα σύστημα πολλαπλών πρακτόρων που μπορεί να λύσει ένα πρόβλημα. Τι, για παράδειγμα, θα χρειαστεί να κάνει ένα σύστημα πολλαπλών πρακτόρων για να βελτιστοποιήσει τη διαδρομή ενός σχολικού λεωφορείου; Πώς θα μπορούσε να λειτουργήσει σε ένα φούρνο;
|
||||
|
||||
## [Μετα-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ai/quiz/46)
|
||||
|
||||
## Ανασκόπηση & Αυτο-Μελέτη
|
||||
|
||||
Ανασκοπήστε τη χρήση αυτού του τύπου συστήματος στη βιομηχανία. Επιλέξτε ένα τομέα όπως η κατασκευή ή η βιομηχανία βιντεοπαιχνιδιών και ανακαλύψτε πώς τα συστήματα πολλαπλών πρακτόρων μπορούν να χρησιμοποιηθούν για την επίλυση μοναδικών προβλημάτων.
|
||||
|
||||
## [Εργασία NetLogo](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Αποποίηση ευθυνών**:
|
||||
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -5,6 +5,12 @@
|
|||
"source_file": "AGENTS.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
"CONTRIBUTING.md": {
|
||||
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
|
||||
"translation_date": "2026-07-08T15:26:01+00:00",
|
||||
"source_file": "CONTRIBUTING.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
"README.md": {
|
||||
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
|
||||
"translation_date": "2026-04-06T15:39:09+00:00",
|
||||
|
|
@ -17,6 +23,19 @@
|
|||
"source_file": "SECURITY.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
"__translation_failures__": {
|
||||
"lessons/sketchnotes/LICENSE.md": {
|
||||
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
|
||||
"source_file": "lessons/sketchnotes/LICENSE.md",
|
||||
"language_code": "pl",
|
||||
"failure_date": "2026-07-08T15:14:53+00:00",
|
||||
"status": "failed",
|
||||
"error_type": "TranslationIncompleteError",
|
||||
"error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
|
||||
"translator_version": "0.20.0",
|
||||
"failure_policy_version": 1
|
||||
}
|
||||
},
|
||||
"etc/CODE_OF_CONDUCT.md": {
|
||||
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
|
||||
"translation_date": "2025-08-24T10:50:22+00:00",
|
||||
|
|
@ -54,8 +73,8 @@
|
|||
"language_code": "pl"
|
||||
},
|
||||
"examples/README.md": {
|
||||
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
|
||||
"translation_date": "2025-10-03T11:30:24+00:00",
|
||||
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
|
||||
"translation_date": "2026-07-08T15:08:50+00:00",
|
||||
"source_file": "examples/README.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
|
|
@ -66,8 +85,8 @@
|
|||
"language_code": "pl"
|
||||
},
|
||||
"lessons/0-course-setup/how-to-run.md": {
|
||||
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
|
||||
"translation_date": "2026-01-15T14:27:45+00:00",
|
||||
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
|
||||
"translation_date": "2026-07-08T15:09:19+00:00",
|
||||
"source_file": "lessons/0-course-setup/how-to-run.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
|
|
@ -191,6 +210,12 @@
|
|||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
|
||||
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
|
||||
"translation_date": "2026-07-08T15:04:58+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
|
||||
"language_code": "pl"
|
||||
},
|
||||
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
|
||||
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
|
||||
"translation_date": "2025-08-24T10:35:06+00:00",
|
||||
|
|
@ -330,8 +355,8 @@
|
|||
"language_code": "pl"
|
||||
},
|
||||
"lessons/5-NLP/README.md": {
|
||||
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
|
||||
"translation_date": "2025-08-24T10:11:53+00:00",
|
||||
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
|
||||
"translation_date": "2026-07-08T15:09:47+00:00",
|
||||
"source_file": "lessons/5-NLP/README.md",
|
||||
"language_code": "pl"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
# Wkład w AI-For-Beginners
|
||||
|
||||
Dziękujemy za zainteresowanie wniesieniem wkładu do AI-For-Beginners! Chętnie przyjmujemy tłumaczenia, poprawki lekcji oraz korekty formatowania.
|
||||
|
||||
## Umowa licencyjna współtwórcy Microsoft (CLA)
|
||||
|
||||
Ten projekt przyjmuje wkłady i sugestie. Większość wkładów wymaga zgody na Umowę licencyjną współtwórcy (CLA), w której oświadczasz, że masz prawo i faktycznie udzielasz nam praw do korzystania z Twojego wkładu. Szczegóły znajdziesz na [https://cla.microsoft.com](https://cla.microsoft.com).
|
||||
|
||||
Gdy zgłosisz pull request, bot CLA automatycznie określi, czy potrzebujesz dostarczyć CLA, i odpowiednio oznaczy PR (np. etykieta, komentarz). Wystarczy, że wykonasz instrukcje podane przez bota. Będziesz musiał to zrobić tylko raz dla wszystkich repozytoriów korzystających z naszego CLA.
|
||||
|
||||
## Jak wnieść wkład
|
||||
|
||||
### 1. Poprawianie literówek / błędów w kodzie
|
||||
Jeśli znajdziesz literówkę lub błąd w którymkolwiek notatniku Jupyter albo pliku markdown lekcji:
|
||||
1. Rozgałęź repozytorium (fork).
|
||||
2. Popraw literówkę lub uszkodzony link.
|
||||
3. Złóż Pull Request z jasnym opisem poprawki.
|
||||
|
||||
### 2. Przesyłanie tłumaczeń
|
||||
Chcemy, aby lekcje były dostępne w innych językach! Prosimy umieszczać tłumaczenia w katalogu `translations/`, korzystając z istniejących tam nazw folderów (na przykład `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`).
|
||||
|
||||
Więcej szczegółów znajdziesz w [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Zastrzeżenie**:
|
||||
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,31 +1,31 @@
|
|||
# Przykłady AI dla Początkujących
|
||||
# Przykłady AI Przyjazne dla Początkujących
|
||||
|
||||
Witaj! Ten katalog zawiera proste, samodzielne przykłady, które pomogą Ci rozpocząć przygodę z AI i uczeniem maszynowym. Każdy przykład został zaprojektowany z myślą o początkujących, z dokładnymi komentarzami i wyjaśnieniami krok po kroku.
|
||||
Witamy! Ten katalog zawiera proste, samodzielne przykłady, które pomogą Ci zacząć z AI i uczeniem maszynowym. Każdy przykład jest zaprojektowany tak, aby był przyjazny dla początkujących, z szczegółowymi komentarzami i wyjaśnieniami krok po kroku.
|
||||
|
||||
## 📚 Przegląd Przykładów
|
||||
|
||||
| Przykład | Opis | Poziom trudności | Wymagania wstępne |
|
||||
|----------|------|------------------|-------------------|
|
||||
| [Hello AI World](../../../examples/01-hello-ai-world.py) | Twój pierwszy program AI - proste rozpoznawanie wzorców | ⭐ Początkujący | Podstawy Pythona |
|
||||
| [Prosta Sieć Neuronowa](../../../examples/02-simple-neural-network.py) | Zbuduj sieć neuronową od podstaw | ⭐⭐ Początkujący+ | Python, podstawowa matematyka |
|
||||
| [Klasyfikator Obrazów](./03-image-classifier.ipynb) | Klasyfikuj obrazy za pomocą wstępnie wytrenowanego modelu | ⭐⭐ Początkujący+ | Python, numpy |
|
||||
| [Analiza Sentimentów Tekstu](../../../examples/04-text-sentiment.py) | Analizuj sentyment tekstu (pozytywny/negatywny) | ⭐⭐ Początkujący+ | Python |
|
||||
| Przykład | Opis | Trudność | Wymagania wstępne |
|
||||
|---------|-------------|------------|---------------|
|
||||
| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Twój pierwszy program AI - proste rozpoznawanie wzorców | ⭐ Początkujący | Podstawy Pythona |
|
||||
| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Zbuduj sieć neuronową od zera | ⭐⭐ Początkujący+ | Python, podstawowa matematyka |
|
||||
| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Klasyfikuj obrazy za pomocą wstępnie wytrenowanego modelu | ⭐⭐ Początkujący+ | Python, numpy |
|
||||
| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Analiza sentymentu tekstu (pozytywny/negatywny) | ⭐⭐ Początkujący+ | Python |
|
||||
|
||||
## 🚀 Rozpoczęcie Pracy
|
||||
## 🚀 Jak Zacząć
|
||||
|
||||
### Wymagania wstępne
|
||||
|
||||
Upewnij się, że masz zainstalowany Python (zalecana wersja 3.8 lub wyższa). Zainstaluj wymagane pakiety:
|
||||
Upewnij się, że masz zainstalowanego Pythona (zalecana wersja 3.8 lub wyższa). Zainstaluj wymagane pakiety:
|
||||
|
||||
```bash
|
||||
# For Python scripts
|
||||
# Dla skryptów Pythona
|
||||
pip install numpy
|
||||
|
||||
# For Jupyter notebooks (image classifier)
|
||||
# Dla notatników Jupyter (klasyfikator obrazów)
|
||||
pip install jupyter numpy pillow tensorflow
|
||||
```
|
||||
|
||||
Lub skorzystaj z środowiska conda z głównego programu nauczania:
|
||||
Lub użyj środowiska conda z głównego programu nauczania:
|
||||
|
||||
```bash
|
||||
conda env create --name ai4beg --file ../environment.yml
|
||||
|
|
@ -34,52 +34,54 @@ conda activate ai4beg
|
|||
|
||||
### Uruchamianie Przykładów
|
||||
|
||||
**Dla skryptów Python (.py):**
|
||||
**Dla skryptów Pythona (.py):**
|
||||
```bash
|
||||
python 01-hello-ai-world.py
|
||||
```
|
||||
|
||||
**Dla notebooków Jupyter (.ipynb):**
|
||||
**Dla notatników Jupyter (.ipynb):**
|
||||
```bash
|
||||
jupyter notebook 03-image-classifier.ipynb
|
||||
```
|
||||
|
||||
## 📖 Ścieżka Nauki
|
||||
|
||||
Zalecamy realizowanie przykładów w następującej kolejności:
|
||||
Zalecamy wykonywanie przykładów w kolejności:
|
||||
|
||||
1. **Rozpocznij od "Hello AI World"** - Poznaj podstawy rozpoznawania wzorców
|
||||
2. **Zbuduj Prostą Sieć Neuronową** - Zrozum, jak działają sieci neuronowe
|
||||
3. **Wypróbuj Klasyfikator Obrazów** - Zobacz AI w akcji na prawdziwych obrazach
|
||||
4. **Analizuj Sentiment Tekstu** - Odkryj przetwarzanie języka naturalnego
|
||||
1. **Zacznij od "Hello AI World"** - Poznaj podstawy rozpoznawania wzorców
|
||||
2. **Zbuduj prostą sieć neuronową** - Zrozum, jak działają sieci neuronowe
|
||||
3. **Wypróbuj klasyfikator obrazów** - Zobacz działanie AI na prawdziwych obrazach
|
||||
4. **Analizuj sentyment tekstu** - Poznaj przetwarzanie języka naturalnego
|
||||
|
||||
## 💡 Wskazówki dla Początkujących
|
||||
|
||||
- **Dokładnie czytaj komentarze w kodzie** - Wyjaśniają, co robi każda linia
|
||||
- **Eksperymentuj!** - Spróbuj zmieniać wartości i zobacz, co się stanie
|
||||
- **Nie martw się, jeśli nie zrozumiesz wszystkiego od razu** - Nauka wymaga czasu
|
||||
- **Zadawaj pytania** - Skorzystaj z [Forum dyskusyjnego](https://github.com/microsoft/AI-For-Beginners/discussions)
|
||||
- **Eksperymentuj!** - Próbuj zmieniać wartości i zobacz, co się stanie
|
||||
- **Nie martw się, jeśli nie rozumiesz wszystkiego od razu** - Nauka wymaga czasu
|
||||
- **Zadawaj pytania** - Skorzystaj z [tablicy dyskusyjnej](https://github.com/microsoft/AI-For-Beginners/discussions)
|
||||
|
||||
## 🔗 Kolejne Kroki
|
||||
|
||||
Po ukończeniu tych przykładów, zapoznaj się z pełnym programem nauczania:
|
||||
Po ukończeniu tych przykładów zapoznaj się z pełnym programem nauczania:
|
||||
- [Wprowadzenie do AI](../lessons/1-Intro/README.md)
|
||||
- [Sieci Neuronowe](../lessons/3-NeuralNetworks/README.md)
|
||||
- [Wizja Komputerowa](../lessons/4-ComputerVision/README.md)
|
||||
- [Przetwarzanie Języka Naturalnego](../lessons/5-NLP/README.md)
|
||||
- [Sieci neuronowe](../lessons/3-NeuralNetworks/README.md)
|
||||
- [Wizja komputerowa](../lessons/4-ComputerVision/README.md)
|
||||
- [Przetwarzanie języka naturalnego](../lessons/5-NLP/README.md)
|
||||
|
||||
## 🤝 Współtworzenie
|
||||
## 🤝 Wkład w Projekt
|
||||
|
||||
Uważasz, że te przykłady są pomocne? Pomóż nam je ulepszyć:
|
||||
- Zgłaszaj problemy lub proponuj ulepszenia
|
||||
- Dodawaj więcej przykładów dla początkujących
|
||||
Te przykłady okazały się pomocne? Pomóż nam je ulepszyć:
|
||||
- Zgłaszaj problemy lub sugeruj ulepszenia
|
||||
- Dodaj więcej przykładów dla początkujących
|
||||
- Poprawiaj dokumentację i komentarze
|
||||
|
||||
---
|
||||
|
||||
*Pamiętaj: Każdy ekspert kiedyś był początkującym. Miłej nauki! 🎓*
|
||||
*Pamiętaj: Każdy ekspert był kiedyś początkującym. Powodzenia w nauce! 🎓*
|
||||
|
||||
---
|
||||
|
||||
**Zastrzeżenie**:
|
||||
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego języku źródłowym powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Zastrzeżenie**:
|
||||
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
# Jak Uruchomić Kod
|
||||
# Jak uruchomić kod
|
||||
|
||||
Ten program nauczania zawiera wiele wykonalnych przykładów i laboratoriów, które będziesz chciał uruchomić. Aby to zrobić, musisz mieć możliwość wykonywania kodu Python w Jupyter Notebooks dostarczonych w ramach tego programu nauczania. Masz kilka opcji uruchamiania kodu:
|
||||
Ten program nauczania zawiera wiele wykonalnych przykładów i laboratoriów, które zechcesz uruchomić. Aby to zrobić, potrzebujesz możliwości wykonywania kodu Python w Jupyter Notebooks udostępnionych w ramach tego kursu. Masz kilka opcji uruchamiania kodu:
|
||||
|
||||
## Uruchamianie lokalnie na Twoim komputerze
|
||||
## Uruchamianie lokalnie na komputerze
|
||||
|
||||
Aby uruchomić kod lokalnie na Twoim komputerze, potrzebna jest instalacja Pythona. Jednym z rekomendowanych rozwiązań jest instalacja **[miniconda](https://conda.io/en/latest/miniconda.html)** - jest to raczej lekka instalacja, która wspiera menedżera pakietów `conda` do zarządzania różnymi **wirtualnymi środowiskami** Pythona.
|
||||
Aby uruchomić kod lokalnie na komputerze, potrzebna jest instalacja Pythona. Jedną z rekomendacji jest zainstalowanie **[miniconda](https://conda.io/en/latest/miniconda.html)** – to dość lekka instalacja, która obsługuje menedżera pakietów `conda` dla różnych **wirtualnych środowisk** Pythona.
|
||||
|
||||
Po zainstalowaniu minicondy, sklonuj repozytorium i utwórz wirtualne środowisko, które będzie używane na potrzeby tego kursu:
|
||||
Po zainstalowaniu miniconda, sklonuj repozytorium i utwórz wirtualne środowisko do wykorzystania w tym kursie:
|
||||
|
||||
```bash
|
||||
git clone http://github.com/microsoft/ai-for-beginners
|
||||
|
|
@ -17,15 +17,15 @@ conda activate ai4beg
|
|||
|
||||
### Korzystanie z Visual Studio Code z rozszerzeniem Python
|
||||
|
||||
Ten program nauczania najlepiej jest używać, otwierając go w [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) z [rozszerzeniem Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
|
||||
Ten kurs najlepiej używać, otwierając go w [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) z [rozszerzeniem Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
|
||||
|
||||
> **Uwaga**: Po sklonowaniu i otwarciu katalogu w VS Code, automatycznie zasugeruje Ci instalację rozszerzeń Pythona. Będziesz również musiał zainstalować minicondę, jak opisano powyżej.
|
||||
> **Uwaga**: Po sklonowaniu i otwarciu katalogu w VS Code, program automatycznie zasugeruje instalację rozszerzeń Pythona. Musisz też zainstalować miniconda według wyżej opisanych kroków.
|
||||
|
||||
> **Uwaga**: Jeśli VS Code zasugeruje ponowne otwarcie repozytorium w kontenerze, powinieneś odmówić tego, aby korzystać z lokalnej instalacji Pythona.
|
||||
> **Uwaga**: Jeśli VS Code zasugeruje ponowne otwarcie repozytorium w kontenerze, powinieneś odmówić, by korzystać z lokalnej instalacji Pythona.
|
||||
|
||||
### Korzystanie z Jupyter w przeglądarce
|
||||
|
||||
Możesz również skorzystać ze środowiska Jupyter w przeglądarce na własnym komputerze. Zarówno klasyczny Jupyter, jak i JupyterHub oferują wygodne środowisko deweloperskie z autouzupełnianiem, podświetlaniem kodu itp.
|
||||
Możesz też używać środowiska Jupyter w przeglądarce na własnym komputerze. Zarówno klasyczny Jupyter, jak i JupyterHub oferują wygodne środowisko programistyczne z autouzupełnianiem, podświetlaniem kodu itp.
|
||||
|
||||
Aby uruchomić Jupyter lokalnie, przejdź do katalogu kursu i wykonaj:
|
||||
|
||||
|
|
@ -36,36 +36,36 @@ lub
|
|||
```bash
|
||||
jupyterhub
|
||||
```
|
||||
Następnie możesz przejść do dowolnego pliku `.ipynb`, otworzyć go i rozpocząć pracę.
|
||||
Następnie możesz przejść do dowolnego pliku `.ipynb`, otworzyć go i zacząć pracę.
|
||||
|
||||
### Uruchamianie w kontenerze
|
||||
|
||||
Alternatywą dla instalacji Pythona jest uruchomienie kodu w kontenerze. Nasze repozytorium dostarcza specjalny folder `.devcontainer`, który pokazuje, jak zbudować kontener dla tego repozytorium, a VS Code oferuje możliwość ponownego otwarcia kodu w kontenerze. Wymaga to instalacji Dockera i jest bardziej złożone, dlatego zalecamy to bardziej doświadczonym użytkownikom.
|
||||
Alternatywą dla instalacji Pythona może być uruchomienie kodu w kontenerze. Ponieważ nasze repozytorium zawiera specjalny folder `.devcontainer`, który instruuje, jak zbudować kontener dla tego repozytorium, VS Code oferuje możliwość ponownego otwarcia kodu w kontenerze. Wymaga to zainstalowania Dockera i jest to bardziej skomplikowane, więc zalecamy tę opcję bardziej doświadczonym użytkownikom.
|
||||
|
||||
## Uruchamianie w Chmurze
|
||||
## Uruchamianie w chmurze
|
||||
|
||||
Jeśli nie chcesz instalować Pythona lokalnie i masz dostęp do zasobów w chmurze, dobrą alternatywą jest uruchamianie kodu w chmurze. Istnieje kilka sposobów, aby to zrobić:
|
||||
Jeśli nie chcesz instalować Pythona lokalnie i masz dostęp do zasobów chmurowych – dobrą alternatywą jest uruchamianie kodu w chmurze. Możesz to zrobić na kilka sposobów:
|
||||
|
||||
* Korzystanie z **[GitHub Codespaces](https://github.com/features/codespaces)** – jest to wirtualne środowisko utworzone dla Ciebie na GitHub, dostępne przez przeglądarkę VS Code. Jeśli masz dostęp do Codespaces, możesz po prostu kliknąć przycisk **Code** w repozytorium, uruchomić codespace i szybko zacząć pracę.
|
||||
* Korzystanie z **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) oferuje darmowe zasoby obliczeniowe w chmurze, dla osób takich jak Ty, aby testować kod z GitHuba. Na stronie głównej jest przycisk umożliwiający otwarcie repozytorium w Binder – przeniesie Cię on szybko na stronę binder, która zbuduje pod spodem kontener i uruchomi interfejs Jupyter w przeglądarce bezproblemowo.
|
||||
* Korzystając z **[GitHub Codespaces](https://github.com/features/codespaces)**, czyli wirtualnego środowiska utworzonego dla Ciebie na GitHub i dostępnego przez interfejs VS Code w przeglądarce. Jeśli masz dostęp do Codespaces, wystarczy kliknąć przycisk **Code** w repozytorium, uruchomić codespace i szybko zacząć pracę.
|
||||
* Korzystając z **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) oferuje bezpłatne zasoby obliczeniowe w chmurze dla osób takich jak Ty do testowania kodu z GitHub. Na stronie głównej jest przycisk do otwarcia repozytorium w Binder – szybko przeniesie Cię on do serwisu binder, który zbuduje kontener i bezproblemowo uruchomi interfejs Jupyter w przeglądarce.
|
||||
|
||||
> **Uwaga**: Aby zapobiec nadużyciom, Binder ma zablokowany dostęp do niektórych zasobów sieciowych. Może to uniemożliwić działanie niektórych fragmentów kodu, które pobierają modele i/lub zbiory danych z publicznego internetu. Może być konieczne znalezienie obejść. Dodatkowo, zasoby obliczeniowe oferowane przez Binder są dość podstawowe, więc trening będzie powolny, szczególnie w późniejszych, bardziej złożonych lekcjach.
|
||||
> **Uwaga**: Aby zapobiec nadużyciom, Binder ma zablokowany dostęp do niektórych zasobów internetowych. Może to uniemożliwić działanie niektórych fragmentów kodu, które pobierają modele i/lub zestawy danych z internetu. Możesz potrzebować obejść te ograniczenia. Poza tym zasoby obliczeniowe udostępniane przez Binder są dość podstawowe, więc trenowanie będzie powolne, zwłaszcza w późniejszych, bardziej skomplikowanych lekcjach.
|
||||
|
||||
## Uruchamianie w Chmurze z GPU
|
||||
## Uruchamianie w chmurze z GPU
|
||||
|
||||
Niektóre z późniejszych lekcji w tym programie nauczania bardzo skorzystałyby na wsparciu GPU. Trening modelu, na przykład, może być w przeciwnym razie bardzo powolny. Masz kilka opcji, szczególnie jeśli masz dostęp do chmury poprzez [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) lub poprzez Twoją instytucję:
|
||||
Niektóre z późniejszych lekcji w tym kursie bardzo skorzystałyby na wsparciu GPU. Trenowanie modeli może być w przeciwnym razie bardzo powolne. Masz kilka opcji, zwłaszcza jeśli masz dostęp do chmury przez [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) lub przez swoją instytucję:
|
||||
|
||||
* Utwórz [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) i połącz się z nią przez Jupyter. Możesz wtedy sklonować repozytorium bezpośrednio na tę maszynę i zacząć naukę. Maszyny wirtualne serii NC mają wsparcie GPU.
|
||||
* Utwórz [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) i połącz się z nią przez Jupyter. Możesz wtedy sklonować repozytorium bezpośrednio na maszynę i zacząć naukę. Maszyny NC-series mają wsparcie GPU.
|
||||
|
||||
> **Uwaga**: Niektóre subskrypcje, w tym Azure for Students, nie zapewniają wsparcia GPU „od ręki”. Może być konieczne zgłoszenie zapytania o dodatkowe rdzenie GPU do pomocy technicznej.
|
||||
> **Uwaga**: Niektóre subskrypcje, w tym Azure for Students, nie oferują domyślnie wsparcia GPU. Może być konieczne zgłoszenie prośby o dodatkowe rdzenie GPU do pomocy technicznej.
|
||||
|
||||
* Utwórz [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) i użyj tam funkcji Notebook. [Ten film](https://azure-for-academics.github.io/quickstart/azureml-papers/) pokazuje, jak sklonować repozytorium do notatnika Azure ML i zacząć go używać.
|
||||
* Utwórz [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste), a następnie używaj tam funkcji Notatnika. [Ten film](https://azure-for-academics.github.io/quickstart/azureml-papers/) pokazuje, jak sklonować repozytorium do notatnika Azure ML i zacząć je wykorzystywać.
|
||||
|
||||
Możesz również użyć Google Colab, który oferuje darmowe wsparcie GPU, i przesłać tam notatniki Jupyter, aby wykonywać je pojedynczo.
|
||||
Możesz także użyć Google Colab, który oferuje bezpłatną obsługę GPU i przesłać tam Jupyter Notebooks, aby wykonywać je pojedynczo.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Zastrzeżenie**:
|
||||
Niniejszy dokument został przetłumaczony za pomocą automatycznej usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mimo że staramy się zapewnić dokładność, prosimy mieć na uwadze, że tłumaczenia automatyczne mogą zawierać błędy lub niedokładności. Oryginalny dokument w języku źródłowym powinien być uznany za źródło autorytatywne. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
|
||||
**Zastrzeżenie**:
|
||||
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -4,11 +4,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Wstępnie wytrenowane modele i transfer uczenia\n",
|
||||
"# Modele wstępnie wytrenowane i transfer uczenia\n",
|
||||
"\n",
|
||||
"Trenowanie CNN-ów może zająć dużo czasu i wymaga dużej ilości danych. Jednak większość czasu poświęca się na naukę najlepszych niskopoziomowych filtrów, które sieć wykorzystuje do wyodrębniania wzorców z obrazów. Pojawia się więc naturalne pytanie – czy możemy użyć sieci neuronowej wytrenowanej na jednym zbiorze danych i dostosować ją do klasyfikacji innych obrazów bez pełnego procesu trenowania?\n",
|
||||
"Trenowanie CNN może zająć dużo czasu, a do tego zadania potrzebne jest wiele danych. Jednakże, większość czasu poświęcona jest na naukę najlepszych filtrów niskiego poziomu, których sieć używa do wyodrębniania wzorców z obrazów. Pojawia się naturalne pytanie – czy można użyć sieci neuronowej wytrenowanej na jednym zbiorze danych i dostosować ją do klasyfikacji innych obrazów bez pełnego procesu trenowania?\n",
|
||||
"\n",
|
||||
"To podejście nazywa się **transferem uczenia** (ang. transfer learning), ponieważ przenosimy pewną wiedzę z jednego modelu sieci neuronowej do innego. W transferze uczenia zazwyczaj zaczynamy od wstępnie wytrenowanego modelu, który został wytrenowany na dużym zbiorze obrazów, takim jak **ImageNet**. Te modele potrafią już skutecznie wyodrębniać różne cechy z ogólnych obrazów, a w wielu przypadkach zbudowanie klasyfikatora na podstawie tych wyodrębnionych cech może dać dobre rezultaty.\n"
|
||||
"Takie podejście nazywa się **transferem uczenia**, ponieważ przenosimy część wiedzy z jednego modelu sieci neuronowej do innego. W transferze uczenia zazwyczaj zaczynamy od modelu wstępnie wytrenowanego, który był uczony na dużym zbiorze obrazów, takim jak **ImageNet**. Te modele potrafią już dobrze wydobywać różne cechy z ogólnych obrazów, i w wielu przypadkach samo zbudowanie klasyfikatora na podstawie tych wyodrębnionych cech może przynieść dobry rezultat.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -29,11 +29,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Zbiór danych Cats vs. Dogs\n",
|
||||
"## Zbiór danych Koty kontra Psy\n",
|
||||
"\n",
|
||||
"W tej jednostce zajmiemy się rozwiązaniem rzeczywistego problemu klasyfikacji obrazów kotów i psów. W tym celu skorzystamy ze [zbioru danych Cats vs. Dogs z Kaggle](https://www.kaggle.com/c/dogs-vs-cats), który można również pobrać [ze strony Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
|
||||
"W tej jednostce rozwiążemy problem klasyfikacji obrazów kotów i psów w rzeczywistym świecie. W tym celu użyjemy [zbioru danych Koty kontra Psy z Kaggle](https://www.kaggle.com/c/dogs-vs-cats), który można również pobrać [z Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
|
||||
"\n",
|
||||
"Pobierzmy ten zbiór danych i rozpakujmy go do katalogu `data` (ten proces może zająć trochę czasu!):\n"
|
||||
"Pobierzmy ten zbiór danych i wypakujmy go do katalogu `data` (ten proces może trochę potrwać!):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Niestety, w zestawie danych znajdują się uszkodzone pliki obrazów. Musimy szybko przeprowadzić czyszczenie, aby sprawdzić uszkodzone pliki. Aby nie zaśmiecać tego samouczka, przenieśliśmy kod weryfikujący zestaw danych do modułu.\n"
|
||||
"Niestety w zbiorze danych znajdują się uszkodzone pliki obrazów. Musimy szybko przeprowadzić czyszczenie, aby sprawdzić uszkodzone pliki. Aby nie zniszczyć tego samouczka, przenieśliśmy kod weryfikujący zbiór danych do modułu.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -335,11 +335,11 @@
|
|||
"source": [
|
||||
"## Ładowanie zbioru danych\n",
|
||||
"\n",
|
||||
"W poprzednich przykładach ładowaliśmy zbiory danych wbudowane w Keras. Teraz zajmiemy się własnym zbiorem danych, który musimy załadować z katalogu zawierającego obrazy.\n",
|
||||
"W poprzednich przykładach ładowaliśmy zbiory danych wbudowane w Keras. Teraz zajmiemy się naszym własnym zbiorem danych, który musimy załadować z katalogu z obrazami.\n",
|
||||
"\n",
|
||||
"W rzeczywistości rozmiar zbiorów danych obrazów może być dość duży, dlatego nie można polegać na tym, że wszystkie dane zmieszczą się w pamięci. Z tego powodu zbiory danych często są reprezentowane jako **generatory**, które mogą zwracać dane w małych partiach odpowiednich do treningu.\n",
|
||||
"W rzeczywistości rozmiar zbiorów danych obrazów może być dość duży i nie można polegać na tym, że wszystkie dane zmieszczą się w pamięci. Dlatego zbiory danych często reprezentowane są jako **generatory**, które mogą zwracać dane w minibatchach odpowiednich do trenowania.\n",
|
||||
"\n",
|
||||
"Aby poradzić sobie z klasyfikacją obrazów, Keras zawiera specjalną funkcję `image_dataset_from_directory`, która może ładować obrazy z podkatalogów odpowiadających różnym klasom. Funkcja ta automatycznie skaluje obrazy i może również podzielić zbiór danych na podzbiory treningowe i testowe:\n"
|
||||
"Aby poradzić sobie z klasyfikacją obrazów, Keras zawiera specjalną funkcję `image_dataset_from_directory`, która potrafi ładować obrazy z podkatalogów odpowiadających różnym klasom. Funkcja ta zajmuje się również skalowaniem obrazów i może także podzielić zbiór danych na podzbiory treningowe i testowe:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -383,9 +383,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ważne jest, aby ustawić tę samą wartość `seed` dla obu wywołań, ponieważ wpływa ona na podział obrazów między zestaw treningowy a testowy.\n",
|
||||
"Ważne jest, aby ustawić tę samą wartość `seed` dla obu wywołań, ponieważ wpływa ona na podział obrazów między zbiór treningowy a testowy.\n",
|
||||
"\n",
|
||||
"Zbiór danych automatycznie pobiera nazwy klas z katalogów, a jeśli zajdzie taka potrzeba, możesz uzyskać do nich dostęp, wywołując:\n"
|
||||
"Dataset automatycznie pobiera nazwy klas z katalogów, a w razie potrzeby można się do nich odwołać, wywołując:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zbiory danych, które uzyskaliśmy, mogą być bezpośrednio przekazane do funkcji `fit`, aby wytrenować model. Zawierają one zarówno odpowiadające im obrazy, jak i etykiety, które można iterować za pomocą następującej konstrukcji:\n"
|
||||
"Zbiory danych, które uzyskaliśmy, można bezpośrednio przekazać do funkcji `fit`, aby wytrenować model. Zawierają one zarówno odpowiadające obrazy, jak i etykiety, po których można iterować za pomocą następującej konstrukcji:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -453,16 +453,16 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **Uwaga**: Wszystkie obrazy w zestawie danych są reprezentowane jako tensory zmiennoprzecinkowe w zakresie 0-255. Przed przekazaniem ich do sieci neuronowej musimy skalować te wartości do zakresu 0-1. Podczas wyświetlania obrazów musimy zrobić to samo lub przekonwertować wartości na typ `int` (co robimy w kodzie powyżej), aby pokazać `matplotlib`, że chcemy wyświetlić oryginalny nieskalowany obraz.\n"
|
||||
"> **Uwaga**: Wszystkie obrazy w zbiorze danych są reprezentowane jako tensory zmiennoprzecinkowe w zakresie 0-255. Przed przekazaniem ich do sieci neuronowej, musimy przeskalować te wartości do zakresu 0-1. Podczas wyświetlania obrazów, musimy zrobić to samo lub przekonwertować wartości na typ `int` (co wykonujemy w powyższym kodzie), aby pokazać `matplotlib`, że chcemy wyświetlić oryginalny, nieprzeskalowany obraz.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Wstępnie wytrenowane modele\n",
|
||||
"## Modele wstępnie wytrenowane\n",
|
||||
"\n",
|
||||
"Dla wielu zadań klasyfikacji obrazów można znaleźć wstępnie wytrenowane modele sieci neuronowych. Wiele z tych modeli jest dostępnych w przestrzeni nazw `keras.applications`, a jeszcze więcej modeli można znaleźć w Internecie. Zobaczmy, jak można załadować i użyć najprostszego modelu VGG-16:\n"
|
||||
"Dla wielu zadań klasyfikacji obrazów można znaleźć wstępnie wytrenowane modele sieci neuronowych. Wiele z tych modeli jest dostępnych w przestrzeni nazw `keras.applications`, a jeszcze więcej modeli można znaleźć w Internecie. Zobaczmy, jak można załadować i użyć najprostszy model VGG-16:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -497,7 +497,17 @@
|
|||
}
|
||||
],
|
||||
"source": [
|
||||
"vgg = keras.applications.VGG16()\n",
|
||||
"# SHA-256 of VGG16 weights (with top)\n",
|
||||
"VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n",
|
||||
"\n",
|
||||
"_weights_path = keras.utils.get_file(\n",
|
||||
" 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
|
||||
" 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
|
||||
" file_hash=VGG16_WEIGHTS_SHA256,\n",
|
||||
" hash_algorithm='sha256',\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"vgg = keras.applications.VGG16(weights=_weights_path)\n",
|
||||
"inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n",
|
||||
"\n",
|
||||
"res = vgg(inp)\n",
|
||||
|
|
@ -510,10 +520,10 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jest kilka ważnych rzeczy, o których należy pamiętać:\n",
|
||||
"* Przed przekazaniem danych wejściowych do jakiejkolwiek wstępnie wytrenowanej sieci, muszą one zostać odpowiednio przetworzone. Odbywa się to poprzez wywołanie odpowiedniej funkcji `preprocess_input`, która przyjmuje partię obrazów i zwraca ich przetworzoną formę. W przypadku VGG-16 obrazy są normalizowane, a od wartości każdego kanału odejmowana jest z góry zdefiniowana średnia. Jest to konieczne, ponieważ VGG-16 była pierwotnie trenowana z takim właśnie przetwarzaniem wstępnym.\n",
|
||||
"* Sieć neuronowa jest stosowana do partii danych wejściowych, a w wyniku otrzymujemy partię 1000-elementowych tensorów, które pokazują prawdopodobieństwo każdej klasy. Najbardziej prawdopodobny numer klasy można znaleźć, wywołując `argmax` na tym tensorze.\n",
|
||||
"* Uzyskany wynik to [numer klasy `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Aby zrozumieć ten wynik, można również użyć funkcji `decode_predictions`, która zwraca n najwyższych klas wraz z ich nazwami.\n"
|
||||
"Tutaj jest kilka ważnych rzeczy:\n",
|
||||
"* Przed przekazaniem danych wejściowych do dowolnej sieci uprzednio wytrenowanej, muszą one zostać uprzednio przetworzone w określony sposób. Odbywa się to przez wywołanie odpowiedniej funkcji `preprocess_input`, która przyjmuje partię obrazów i zwraca ich przetworzoną formę. W przypadku VGG-16 obrazy są normalizowane, a od każdego kanału odejmuje się zdefiniowaną wcześniej średnią wartość. Wynika to z faktu, że VGG-16 był oryginalnie trenowany z takim przetwarzaniem wstępnym.\n",
|
||||
"* Sieć neuronowa jest stosowana do partii danych wejściowych, a w wyniku otrzymujemy partię tensorów o wymiarze 1000, które pokazują prawdopodobieństwo dla każdej klasy. Możemy znaleźć najbardziej prawdopodobny numer klasy, wywołując `argmax` na tym tensorze.\n",
|
||||
"* Uzyskany wynik to [numer klasy z `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Aby nadać sens temu wynikowi, możemy także użyć funkcji `decode_predictions`, która zwraca n najlepszych klas wraz z ich nazwami.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -599,7 +609,7 @@
|
|||
"source": [
|
||||
"## Obliczenia na GPU\n",
|
||||
"\n",
|
||||
"Głębokie sieci neuronowe, takie jak VGG-16 i inne nowoczesne architektury, wymagają sporej mocy obliczeniowej do działania. Warto więc skorzystać z przyspieszenia za pomocą GPU, jeśli jest dostępne. Na szczęście Keras automatycznie przyspiesza obliczenia na GPU, jeśli jest ono dostępne. Możemy sprawdzić, czy Tensorflow jest w stanie korzystać z GPU, używając poniższego kodu:\n"
|
||||
"Głębokie sieci neuronowe, takie jak VGG-16 i inne nowocześniejsze architektury, wymagają sporej mocy obliczeniowej do działania. Ma sens używanie przyspieszenia GPU, jeśli jest dostępne. Na szczęście Keras automatycznie przyspiesza obliczenia na GPU, jeśli jest on dostępny. Możemy sprawdzić, czy Tensorflow jest w stanie korzystać z GPU, używając następującego kodu:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -626,9 +636,10 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Ekstrakcja cech za pomocą VGG\n",
|
||||
"\n",
|
||||
"Jeśli chcemy użyć VGG-16 do ekstrakcji cech z naszych obrazów, potrzebujemy modelu bez końcowych warstw klasyfikacyjnych. Możemy utworzyć model VGG-16 bez górnych warstw za pomocą tego kodu:\n"
|
||||
"## Ekstrakcja cech VGG\n",
|
||||
"\n",
|
||||
"Jeśli chcemy użyć VGG-16 do ekstrakcji cech z naszych obrazów, potrzebujemy modelu bez końcowych warstw klasyfikacyjnych. Możemy utworzyć model VGG-16 bez warstw górnych, używając tego kodu:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -680,9 +691,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Wymiar tensora cech wynosi 7x7x512, ale aby go zwizualizować, musieliśmy przekształcić go do formy 2D.\n",
|
||||
"Wymiar tensora cech to 7x7x512, ale w celu wizualizacji musieliśmy go przekształcić do formy 2D.\n",
|
||||
"\n",
|
||||
"Teraz spróbujmy sprawdzić, czy te cechy mogą być użyte do klasyfikacji obrazów. Ręcznie wybierzmy pewną część obrazów (w naszym przypadku 50 minibatchy) i wstępnie obliczmy ich wektory cech. Możemy do tego użyć API **dataset** w Tensorflow. Funkcja `map` przyjmuje zbiór danych i stosuje podaną funkcję lambda, aby go przekształcić. Wykorzystujemy ten mechanizm do stworzenia nowych zbiorów danych, `ds_features_train` i `ds_features_test`, które zawierają cechy wyodrębnione przez VGG zamiast oryginalnych obrazów.\n"
|
||||
"Teraz spróbujmy zobaczyć, czy te cechy mogą być użyte do klasyfikacji obrazów. Ręcznie weźmy część obrazów (50 minibatchy, w naszym przypadku) i wstępnie obliczmy ich wektory cech. Możemy do tego użyć API **dataset** Tensorflow. Funkcja `map` pobiera zbiór danych i stosuje podaną funkcję lambda do jego transformacji. Używamy tego mechanizmu, aby stworzyć nowe zbiory danych, `ds_features_train` oraz `ds_features_test`, które zawierają cechy wyekstrahowane przez VGG zamiast oryginalnych obrazów.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -712,9 +723,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Użyliśmy konstrukcji `.take(50)`, aby ograniczyć rozmiar zbioru danych i przyspieszyć naszą demonstrację. Oczywiście możesz przeprowadzić ten eksperyment na pełnym zbiorze danych.\n",
|
||||
"Użyliśmy konstrukcji `.take(50)`, aby ograniczyć rozmiar zbioru danych i przyspieszyć naszą demonstrację. Oczywiście możesz wykonać ten eksperyment na pełnym zbiorze danych.\n",
|
||||
"\n",
|
||||
"Teraz, gdy mamy zbiór danych z wyodrębnionymi cechami, możemy wytrenować prosty gęsty klasyfikator, który będzie rozróżniał koty od psów. Ta sieć przyjmie wektor cech o kształcie (7,7,512) i wygeneruje jeden wynik odpowiadający albo psu, albo kotu. Ponieważ jest to klasyfikacja binarna, używamy funkcji aktywacji `sigmoid` oraz straty `binary_crossentropy`.\n"
|
||||
"Teraz, gdy mamy zbiór danych z wyodrębnionymi cechami, możemy wytrenować prosty gęsty klasyfikator do rozróżniania kotów i psów. Ta sieć przyjmie wektor cech o kształcie (7,7,512) i wygeneruje jedno wyjście, które odpowiada albo psu, albo kotu. Ponieważ jest to klasyfikacja binarna, używamy funkcji aktywacji `sigmoid` oraz straty `binary_crossentropy`.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -743,13 +754,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Wynik jest świetny, możemy odróżnić kota od psa z prawdopodobieństwem prawie 95%! Jednakże, przetestowaliśmy to podejście tylko na podzbiorze wszystkich obrazów, ponieważ ręczne wyodrębnianie cech wydaje się zajmować dużo czasu.\n",
|
||||
"Wynik jest świetny, potrafimy rozróżnić kota od psa z prawie 95% prawdopodobieństwem! Jednak przetestowaliśmy to podejście tylko na podzbiorze wszystkich obrazów, ponieważ ręczne wydobywanie cech wydaje się zajmować dużo czasu.\n",
|
||||
"\n",
|
||||
"## Transfer learning z użyciem jednej sieci VGG\n",
|
||||
"## Transfer learning z wykorzystaniem jednej sieci VGG\n",
|
||||
"\n",
|
||||
"Możemy również uniknąć ręcznego wstępnego obliczania cech, korzystając z oryginalnej sieci VGG-16 w całości podczas treningu, dodając ekstraktor cech jako pierwszą warstwę naszej sieci.\n",
|
||||
"Możemy również uniknąć ręcznego wstępnego obliczania cech, używając oryginalnej sieci VGG-16 jako całości podczas trenowania, dodając ekstraktor cech do naszej sieci jako pierwszą warstwę.\n",
|
||||
"\n",
|
||||
"Piękno architektury Keras polega na tym, że model VGG-16, który zdefiniowaliśmy powyżej, może być również użyty jako warstwa w innej sieci neuronowej! Wystarczy skonstruować sieć z gęstym klasyfikatorem na jej szczycie, a następnie wytrenować całą sieć za pomocą propagacji wstecznej.\n"
|
||||
"Piękno architektury Keras polega na tym, że model VGG-16, który zdefiniowaliśmy powyżej, może być również użyty jako warstwa w innej sieci neuronowej! Wystarczy skonstruować sieć z gęstym klasyfikatorem na jej wierzchołku, a następnie trenować całą sieć za pomocą propagacji wstecznej.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -793,13 +804,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ten model wygląda jak sieć klasyfikacyjna typu end-to-end, która przyjmuje obraz i zwraca klasę. Jednak trudność polega na tym, że chcemy, aby VGG16 działał jako ekstraktor cech, a nie był ponownie trenowany. Dlatego musimy **zamrozić wagi ekstraktora cech konwolucyjnych**. Możemy uzyskać dostęp do pierwszej warstwy sieci, wywołując `model.layers[0]`, i wystarczy ustawić właściwość `trainable` na `False`.\n",
|
||||
"Ten model wygląda jak sieć klasyfikacyjna od początku do końca, która przyjmuje obraz i zwraca klasę. Jednak trudność polega na tym, że chcemy, aby VGG16 działał jako ekstraktor cech, a nie był ponownie trenowany. Dlatego musimy **zamrozić wagi ekstraktora cech konwolucyjnych**. Możemy uzyskać dostęp do pierwszej warstwy sieci, wywołując `model.layers[0]`, i wystarczy ustawić właściwość `trainable` na `False`.\n",
|
||||
"\n",
|
||||
"> **Note**: Zamrożenie wag ekstraktora cech jest konieczne, ponieważ w przeciwnym razie nietrenowana warstwa klasyfikatora może zniszczyć oryginalne, wstępnie wytrenowane wagi ekstraktora konwolucyjnego.\n",
|
||||
"> **Uwaga**: Zamrożenie wag ekstraktora cech jest konieczne, ponieważ w przeciwnym razie nietrenowana warstwa klasyfikatora może zniszczyć oryginalne wagi ekstraktora konwolucyjnego wytrenowanego wcześniej.\n",
|
||||
"\n",
|
||||
"Możesz zauważyć, że chociaż całkowita liczba parametrów w naszej sieci wynosi około 15 milionów, trenujemy jedynie 25 tysięcy parametrów. Wszystkie pozostałe parametry najwyższych warstw filtrów konwolucyjnych są wstępnie wytrenowane. To dobrze, ponieważ możemy dostroić mniejszą liczbę parametrów przy użyciu mniejszej liczby przykładów.\n",
|
||||
"Możesz zauważyć, że chociaż całkowita liczba parametrów w naszej sieci wynosi około 15 milionów, trenujemy tylko 25 tysięcy parametrów. Wszystkie pozostałe parametry najwyższej warstwy filtrów konwolucyjnych są wytrenowane wcześniej. To dobrze, ponieważ możemy dopasować mniejszą liczbę parametrów z mniejszą liczbą przykładów.\n",
|
||||
"\n",
|
||||
"Teraz przeszkolimy naszą sieć i zobaczymy, jak dobre wyniki możemy osiągnąć. Oczekuj dość długiego czasu działania i nie martw się, jeśli wykonanie wydaje się przez jakiś czas zamrożone.\n"
|
||||
"Teraz wytrenujemy naszą sieć i zobaczymy, jak dobrze możemy to zrobić. Spodziewaj się raczej długiego czasu uruchomienia i nie martw się, jeśli wykonanie przez chwilę będzie wyglądać na zamrożone.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -824,11 +835,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Wygląda na to, że udało nam się stworzyć całkiem dokładny klasyfikator kotów i psów!\n",
|
||||
"Wygląda na to, że uzyskaliśmy dość dokładny klasyfikator kotów i psów! \n",
|
||||
"\n",
|
||||
"## Zapisywanie i wczytywanie modelu\n",
|
||||
"## Zapisywanie i ładowanie modelu\n",
|
||||
"\n",
|
||||
"Po zakończeniu treningu modelu możemy zapisać jego architekturę oraz wytrenowane wagi do pliku, aby móc je później wykorzystać:\n"
|
||||
"Gdy wytrenujemy model, możemy zapisać jego architekturę oraz wytrenowane wagi do pliku, aby użyć ich w przyszłości:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -852,7 +863,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Możemy wtedy wczytać model z pliku w dowolnym momencie. Może to być przydatne w przypadku, gdy następny eksperyment zniszczy model - nie musiałbyś zaczynać od zera.\n"
|
||||
"Model można następnie wczytać z pliku w dowolnym momencie. Może to być przydatne na wypadek, gdyby następny eksperyment zniszczył model – nie będzie trzeba zaczynać od zera.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -868,15 +879,15 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Dostosowywanie transfer learningu\n",
|
||||
"## Dopasowywanie transferu uczenia\n",
|
||||
"\n",
|
||||
"W poprzedniej sekcji przeszkoliliśmy ostatnią warstwę klasyfikatora, aby klasyfikowała obrazy w naszym własnym zbiorze danych. Nie przeprowadziliśmy jednak ponownego treningu ekstraktora cech, a nasz model opierał się na cechach, które nauczył się na danych ImageNet. Jeśli Twoje obiekty wizualnie różnią się od typowych obrazów ImageNet, taka kombinacja cech może nie działać najlepiej. Dlatego warto rozpocząć trening również warstw konwolucyjnych.\n",
|
||||
"W poprzedniej sekcji trenowaliśmy końcową warstwę klasyfikatora, aby klasyfikować obrazy w naszym własnym zbiorze danych. Nie przeprowadziliśmy jednak ponownego trenowania ekstraktora cech i nasz model opierał się na cechach, które model nauczył się na danych ImageNet. Jeśli twoje obiekty wizualnie różnią się od zwykłych obrazów ImageNet, to połączenie cech może nie działać najlepiej. Dlatego sensowne jest również rozpoczęcie trenowania warstw konwolucyjnych.\n",
|
||||
"\n",
|
||||
"Aby to zrobić, możemy odblokować parametry filtrów konwolucyjnych, które wcześniej zamroziliśmy.\n",
|
||||
"\n",
|
||||
"> **Note:** Ważne jest, aby najpierw zamrozić parametry i przeprowadzić kilka epok treningu, aby ustabilizować wagi w warstwie klasyfikacyjnej. Jeśli od razu rozpoczniesz trening sieci end-to-end z odblokowanymi parametrami, duże błędy mogą zniszczyć wstępnie wytrenowane wagi w warstwach konwolucyjnych.\n",
|
||||
"> **Uwaga:** Ważne jest, aby najpierw zamrozić parametry i przeprowadzić kilka epok treningu w celu ustabilizowania wag w warstwie klasyfikacji. Jeśli od razu zaczniesz trenować sieć end-to-end z odblokowanymi parametrami, duże błędy prawdopodobnie zniszczą wcześniej wyuczone wagi w warstwach konwolucyjnych.\n",
|
||||
"\n",
|
||||
"Nasz konwolucyjny model VGG-16 znajduje się w pierwszej warstwie i sam składa się z wielu warstw. Możemy przyjrzeć się jego strukturze:\n"
|
||||
"Nasz konwolucyjny model VGG-16 znajduje się wewnątrz pierwszej warstwy, a sam składa się z wielu warstw. Możemy przyjrzeć się jego strukturze:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -945,7 +956,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Możemy odmrozić wszystkie warstwy podstawy konwolucyjnej:\n"
|
||||
"Możemy odmrozić wszystkie warstwy bazy konwolucyjnej:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -961,7 +972,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jednak rozmrożenie wszystkich naraz nie jest najlepszym pomysłem. Możemy najpierw rozmrozić tylko kilka ostatnich warstw konwolucji, ponieważ zawierają one wzorce wyższego poziomu, które są istotne dla naszych obrazów. Na przykład, na początek możemy zamrozić wszystkie warstwy z wyjątkiem ostatnich 4:\n"
|
||||
"Jednak odtajenie ich wszystkich naraz nie jest najlepszym pomysłem. Możemy najpierw odtajnić tylko kilka ostatnich warstw konwolucyjnych, ponieważ zawierają one wzorce na wyższym poziomie, które są istotne dla naszych obrazów. Na przykład, na początek możemy zamrozić wszystkie warstwy z wyjątkiem ostatnich 4: \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1000,11 +1011,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zauważ, że liczba trenowalnych parametrów znacząco wzrosła, ale wciąż stanowi około 50% wszystkich parametrów.\n",
|
||||
"Zauważ, że liczba trenowalnych parametrów znacznie wzrosła, ale nadal stanowi około 50% wszystkich parametrów.\n",
|
||||
"\n",
|
||||
"Po odblokowaniu warstw możemy przeprowadzić jeszcze kilka epok treningu (w naszym przykładzie wykonamy tylko jedną). Możesz również wybrać niższą wartość współczynnika uczenia, aby zminimalizować wpływ na wagi wstępnie wytrenowane. Jednak nawet przy niskim współczynniku uczenia możesz spodziewać się spadku dokładności na początku treningu, zanim ostatecznie osiągnie ona nieco wyższy poziom niż w przypadku zamrożonych wag.\n",
|
||||
"Po odblokowaniu można przeprowadzić kilka dodatkowych epok treningu (w naszym przykładzie zrobimy tylko jedną). Można również wybrać niższą szybkość uczenia, aby zminimalizować wpływ na wagi wstępnie wytrenowane. Jednak nawet przy niskiej szybkości uczenia można się spodziewać spadku dokładności na początku treningu, aż ostatecznie osiągnie ona nieco wyższy poziom niż w przypadku stałych wag.\n",
|
||||
"\n",
|
||||
"> **Note:** Ten trening przebiega znacznie wolniej, ponieważ musimy propagować gradienty wstecz przez wiele warstw sieci!\n"
|
||||
"> **Uwaga:** Ten trening przebiega znacznie wolniej, ponieważ musimy propagować gradienty wstecz przez wiele warstw sieci!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1028,9 +1039,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Prawdopodobnie osiągniemy wyższą dokładność treningową, ponieważ używamy bardziej zaawansowanej sieci z większą liczbą parametrów, ale dokładność walidacyjna nie wzrośnie aż tak bardzo.\n",
|
||||
"Prawdopodobnie osiągniemy wyższą dokładność podczas treningu, ponieważ używamy potężniejszej sieci z większą liczbą parametrów, ale dokładność walidacji nie wzrośnie aż tak bardzo.\n",
|
||||
"\n",
|
||||
"Śmiało odblokuj kilka dodatkowych warstw sieci i trenuj dalej, aby sprawdzić, czy uda Ci się osiągnąć wyższą dokładność!\n"
|
||||
"Śmiało odblokuj kilka kolejnych warstw sieci i trenuj dalej, aby sprawdzić, czy uda Ci się osiągnąć wyższą dokładność!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1039,7 +1050,7 @@
|
|||
"source": [
|
||||
"## Inne modele wizji komputerowej\n",
|
||||
"\n",
|
||||
"VGG-16 to jedna z najprostszych architektur wizji komputerowej. Keras oferuje wiele innych wstępnie wytrenowanych sieci. Najczęściej używane z nich to architektury **ResNet**, opracowane przez Microsoft, oraz **Inception** stworzone przez Google. Na przykład, przyjrzyjmy się architekturze najprostszego modelu ResNet-50 (ResNet to rodzina modeli o różnej głębokości, możesz spróbować eksperymentować z ResNet-152, jeśli chcesz zobaczyć, jak wygląda naprawdę głęboki model):\n"
|
||||
"VGG-16 to jedna z najprostszych architektur wizji komputerowej. Keras udostępnia wiele innych wcześniej wytrenowanych sieci. Do najczęściej używanych należą architektury **ResNet**, opracowane przez Microsoft, oraz **Inception** od Google. Na przykład, przyjrzyjmy się architekturze najprostszego modelu ResNet-50 (ResNet to rodzina modeli o różnej głębokości, możesz spróbować eksperymentować z ResNet-152, jeśli chcesz zobaczyć, jak wygląda naprawdę głęboki model):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1441,29 +1452,29 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jak widać, model zawiera te same dobrze znane elementy: warstwy konwolucyjne, warstwy poolingowe oraz końcowy gęsty klasyfikator. Możemy używać tego modelu dokładnie w taki sam sposób, jak używaliśmy VGG-16 do transferu uczenia. Możesz spróbować eksperymentować z powyższym kodem, używając różnych modeli ResNet jako modelu bazowego i zobaczyć, jak zmienia się dokładność.\n",
|
||||
"Jak widać, model zawiera te same znajome elementy budulcowe: warstwy splotowe, warstwy poolingowe oraz końcowy gęsty klasyfikator. Możemy używać tego modelu dokładnie w taki sam sposób, jak używaliśmy VGG-16 do transfer learningu. Możesz spróbować eksperymentować z powyższym kodem, używając różnych modeli ResNet jako modelu bazowego i zobaczyć, jak zmienia się dokładność.\n",
|
||||
"\n",
|
||||
"## Normalizacja Batchowa\n",
|
||||
"## Normalizacja paczki (Batch Normalization)\n",
|
||||
"\n",
|
||||
"Ta sieć zawiera jeszcze jeden typ warstwy: **Normalizacja Batchowa**. Idea normalizacji batchowej polega na doprowadzeniu wartości przepływających przez sieć neuronową do odpowiedniego zakresu. Zazwyczaj sieci neuronowe działają najlepiej, gdy wszystkie wartości mieszczą się w zakresie [-1,1] lub [0,1], dlatego skalujemy/normalizujemy nasze dane wejściowe odpowiednio. Jednak podczas trenowania głębokiej sieci może się zdarzyć, że wartości znacznie wyjdą poza ten zakres, co utrudnia proces uczenia. Warstwa normalizacji batchowej oblicza średnią i odchylenie standardowe dla wszystkich wartości w bieżącej mini-partii i używa ich do normalizacji sygnału przed przekazaniem go przez warstwę sieci neuronowej. To znacząco poprawia stabilność głębokich sieci.\n"
|
||||
"Ta sieć zawiera kolejny rodzaj warstwy: **Normalizację paczki (Batch Normalization)**. Pomysł normalizacji paczki polega na sprowadzeniu wartości przepływających przez sieć neuronową do odpowiedniego zakresu. Zazwyczaj sieci neuronowe działają najlepiej, gdy wszystkie wartości mieszczą się w zakresie [-1,1] lub [0,1], i z tego powodu skalujemy/normalizujemy nasze dane wejściowe odpowiednio. Jednak podczas trenowania głębokiej sieci może się zdarzyć, że wartości znacznie wyjdą poza ten zakres, co utrudnia trening. Warstwa normalizacji paczki oblicza średnią i odchylenie standardowe dla wszystkich wartości bieżącej mini-paczki i używa ich do normalizacji sygnału przed przekazaniem go do warstwy sieci neuronowej. To znacznie poprawia stabilność głębokich sieci.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Podsumowanie\n",
|
||||
"## Wnioski\n",
|
||||
"\n",
|
||||
"Dzięki transferowi uczenia udało nam się szybko stworzyć klasyfikator do naszego zadania klasyfikacji niestandardowych obiektów i osiągnąć wysoką dokładność. Jednak ten przykład nie był całkowicie sprawiedliwy, ponieważ oryginalna sieć VGG-16 była wcześniej wytrenowana do rozpoznawania kotów i psów, więc w zasadzie korzystaliśmy z wzorców, które już były obecne w sieci. Można spodziewać się niższej dokładności w przypadku bardziej egzotycznych, specyficznych dla danej dziedziny obiektów, takich jak detale na linii produkcyjnej w fabryce czy różne liście drzew.\n",
|
||||
"Korzystając z transfer learningu, byliśmy w stanie szybko stworzyć klasyfikator do naszego niestandardowego zadania klasyfikacji obiektów i osiągnąć wysoką dokładność. Jednak ten przykład nie był całkowicie uczciwy, ponieważ oryginalna sieć VGG-16 była wstępnie wytrenowana do rozpoznawania kotów i psów, a zatem ponownie wykorzystaliśmy większość wzorców, które już występowały w sieci. Możesz spodziewać się niższej dokładności w przypadku bardziej egzotycznych, specyficznych dla domeny obiektów, takich jak detale na linii produkcyjnej w zakładzie lub różne liście drzew.\n",
|
||||
"\n",
|
||||
"Widać, że bardziej złożone zadania, które obecnie rozwiązujemy, wymagają większej mocy obliczeniowej i nie mogą być łatwo realizowane na CPU. W następnej części spróbujemy użyć bardziej lekkiej implementacji, aby wytrenować ten sam model przy użyciu mniejszych zasobów obliczeniowych, co przyniesie tylko nieznacznie niższą dokładność.\n"
|
||||
"Widać, że bardziej złożone zadania, które obecnie rozwiązujemy, wymagają większej mocy obliczeniowej i nie mogą być łatwo rozwiązane na CPU. W następnej jednostce postaramy się użyć lżejszej implementacji do trenowania tego samego modelu, wykorzystując mniej zasobów obliczeniowych, co skutkuje jedynie nieznacznie niższą dokładnością.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Zastrzeżenie**: \nTen dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.\n"
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Zastrzeżenie**:\nNiniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1484,12 +1495,6 @@
|
|||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.10"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "c189abc107848f96051085cc30945129",
|
||||
"translation_date": "2025-08-31T12:48:11+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
|
||||
"language_code": "pl"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
|
|
|||
|
|
@ -1,34 +1,34 @@
|
|||
# Przetwarzanie Języka Naturalnego
|
||||
|
||||

|
||||

|
||||
|
||||
W tej sekcji skupimy się na wykorzystaniu sieci neuronowych do rozwiązywania zadań związanych z **Przetwarzaniem Języka Naturalnego (NLP)**. Istnieje wiele problemów NLP, które chcielibyśmy, aby komputery potrafiły rozwiązywać:
|
||||
W tej sekcji skupimy się na wykorzystaniu sieci neuronowych do obsługi zadań związanych z **Przetwarzaniem Języka Naturalnego (NLP)**. Istnieje wiele problemów NLP, które chcemy, aby komputery potrafiły rozwiązywać:
|
||||
|
||||
* **Klasyfikacja tekstu** to typowy problem klasyfikacyjny dotyczący sekwencji tekstowych. Przykłady obejmują klasyfikowanie wiadomości e-mail jako spam lub nie-spam, albo kategoryzowanie artykułów jako sport, biznes, polityka itp. Ponadto, podczas tworzenia chatbotów często musimy zrozumieć, co użytkownik chciał powiedzieć — w takim przypadku mamy do czynienia z **klasyfikacją intencji**. W klasyfikacji intencji często musimy radzić sobie z wieloma kategoriami.
|
||||
* **Analiza sentymentu** to typowy problem regresji, w którym musimy przypisać liczbę (sentyment) odpowiadającą temu, jak pozytywne/negatywne jest znaczenie zdania. Bardziej zaawansowaną wersją analizy sentymentu jest **analiza sentymentu oparta na aspektach** (ABSA), gdzie przypisujemy sentyment nie do całego zdania, ale do jego różnych części (aspektów), np. *W tej restauracji podobała mi się kuchnia, ale atmosfera była okropna*.
|
||||
* **Rozpoznawanie nazwanych jednostek** (NER) odnosi się do problemu wyodrębniania określonych jednostek z tekstu. Na przykład, musimy zrozumieć, że w zdaniu *Muszę polecieć do Paryża jutro* słowo *jutro* odnosi się do DATY, a *Paryż* to LOKALIZACJA.
|
||||
* **Ekstrakcja słów kluczowych** jest podobna do NER, ale musimy automatycznie wyodrębnić słowa istotne dla znaczenia zdania, bez wcześniejszego trenowania na określonych typach jednostek.
|
||||
* **Grupowanie tekstu** może być przydatne, gdy chcemy pogrupować podobne zdania, na przykład podobne zgłoszenia w rozmowach z pomocą techniczną.
|
||||
* **Odpowiadanie na pytania** odnosi się do zdolności modelu do udzielania odpowiedzi na konkretne pytanie. Model otrzymuje fragment tekstu i pytanie jako dane wejściowe, a jego zadaniem jest wskazanie miejsca w tekście, gdzie znajduje się odpowiedź (lub czasami wygenerowanie tekstu odpowiedzi).
|
||||
* **Generowanie tekstu** to zdolność modelu do tworzenia nowego tekstu. Można to traktować jako zadanie klasyfikacyjne, które przewiduje kolejną literę/słowo na podstawie pewnej *podpowiedzi tekstowej*. Zaawansowane modele generowania tekstu, takie jak GPT-3, potrafią rozwiązywać inne zadania NLP, takie jak klasyfikacja, wykorzystując techniki zwane [programowaniem podpowiedzi](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) lub [inżynierią podpowiedzi](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29).
|
||||
* **Podsumowywanie tekstu** to technika, w której chcemy, aby komputer "przeczytał" długi tekst i streścił go w kilku zdaniach.
|
||||
* **Klasyfikacja tekstu** to typowy problem klasyfikacji dotyczący sekwencji tekstowych. Przykłady to klasyfikowanie wiadomości e-mail jako spam vs. nie-spam lub kategoryzowanie artykułów jako sport, biznes, polityka itd. Również podczas tworzenia chatbotów często musimy zrozumieć, co użytkownik chciał powiedzieć – w tym przypadku mamy do czynienia z **klasyfikacją intencji**. Często w klasyfikacji intencji musimy radzić sobie z wieloma kategoriami.
|
||||
* **Analiza sentymentu** to typowy problem regresji, gdzie musimy przypisać liczbę (sentyment) odpowiadającą temu, jak pozytywne/negatywne jest znaczenie zdania. Bardziej zaawansowaną wersją analizy sentymentu jest **analiza sentymentu oparta na aspektach** (ABSA), gdzie sentyment przypisujemy nie całemu zdaniu, a różnym jego częściom (aspektom), np. *W tej restauracji podobała mi się kuchnia, ale atmosfera była okropna*.
|
||||
* **Rozpoznawanie nazwanych jednostek** (NER) odnosi się do problemu wydobywania określonych jednostek z tekstu. Na przykład, musimy zrozumieć, że w zdaniu *Muszę jutro lecieć do Paryża* słowo *jutro* odnosi się do DATY, a *Paryż* to LOKALIZACJA.
|
||||
* **Ekstrakcja słów kluczowych** jest podobna do NER, ale musimy automatycznie wydobyć słowa ważne dla znaczenia zdania, bez wcześniejszego trenowania dla konkretnych typów jednostek.
|
||||
* **Grupowanie tekstu** może być użyteczne, gdy chcemy pogrupować podobne zdania, na przykład podobne zapytania w rozmowach wsparcia technicznego.
|
||||
* **Odpowiadanie na pytania** odnosi się do zdolności modelu do udzielenia odpowiedzi na konkretne pytanie. Model otrzymuje na wejściu fragment tekstu i pytanie, a następnie powinien wskazać miejsce w tekście, gdzie zawarta jest odpowiedź (lub czasem wygenerować tekst odpowiedzi).
|
||||
* **Generowanie tekstu** to zdolność modelu do generowania nowego tekstu. Można to traktować jako zadanie klasyfikacji, które przewiduje kolejną literę/słowo na podstawie *podpowiedzi tekstowej*. Zaawansowane modele generowania tekstu, takie jak GPT-3, potrafią rozwiązywać inne zadania NLP, takie jak klasyfikacja, wykorzystując technikę zwaną [programowaniem podpowiedzi](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) lub [inżynierią podpowiedzi](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)
|
||||
* **Streszczanie tekstu** to technika, gdy chcemy, aby komputer "przeczytał" długi tekst i podsumował go w kilku zdaniach.
|
||||
* **Tłumaczenie maszynowe** można postrzegać jako połączenie rozumienia tekstu w jednym języku i generowania tekstu w innym.
|
||||
|
||||
Początkowo większość zadań NLP była rozwiązywana za pomocą tradycyjnych metod, takich jak gramatyki. Na przykład w tłumaczeniu maszynowym używano parserów do przekształcenia początkowego zdania w drzewo składniowe, następnie wyodrębniano wyższe struktury semantyczne, aby reprezentować znaczenie zdania, a na podstawie tego znaczenia i gramatyki języka docelowego generowano wynik. Obecnie wiele zadań NLP jest skuteczniej rozwiązywanych za pomocą sieci neuronowych.
|
||||
Początkowo większość zadań NLP rozwiązywano za pomocą tradycyjnych metod, takich jak gramatyki. Na przykład w tłumaczeniu maszynowym parsery były używane do przekształcenia zdania początkowego w drzewo składniowe, następnie wydobywane były wyższe poziomy struktur semantycznych reprezentujących znaczenie zdania, a na podstawie tego znaczenia i gramatyki języka docelowego generowano wynik. Obecnie wiele zadań NLP jest skuteczniej rozwiązywanych za pomocą sieci neuronowych.
|
||||
|
||||
> Wiele klasycznych metod NLP jest zaimplementowanych w bibliotece Python [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Dostępna jest świetna [Książka o NLTK](https://www.nltk.org/book/), która omawia, jak różne zadania NLP można rozwiązać za pomocą NLTK.
|
||||
> Wiele klasycznych metod NLP jest zaimplementowanych w bibliotece Pythona [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Dostępna jest świetna [książka NLTK](https://www.nltk.org/book/), która opisuje, jak różne zadania NLP można rozwiązać przy użyciu NLTK.
|
||||
|
||||
W naszym kursie skupimy się głównie na wykorzystaniu sieci neuronowych w NLP, a NLTK będziemy używać w razie potrzeby.
|
||||
W naszym kursie skupimy się głównie na wykorzystaniu sieci neuronowych w NLP i będziemy korzystać z NLTK tam, gdzie to będzie potrzebne.
|
||||
|
||||
Nauczyliśmy się już, jak używać sieci neuronowych do pracy z danymi tabelarycznymi i obrazami. Główna różnica między tymi typami danych a tekstem polega na tym, że tekst jest sekwencją o zmiennej długości, podczas gdy rozmiar wejścia w przypadku obrazów jest znany z góry. Podczas gdy sieci konwolucyjne mogą wyodrębniać wzorce z danych wejściowych, wzorce w tekście są bardziej złożone. Na przykład negacja może być oddzielona od podmiotu przez dowolną liczbę słów (np. *Nie lubię pomarańczy* vs. *Nie lubię tych dużych kolorowych smacznych pomarańczy*), a mimo to powinna być interpretowana jako jeden wzorzec. Dlatego, aby przetwarzać język, musimy wprowadzić nowe typy sieci neuronowych, takie jak *sieci rekurencyjne* i *transformery*.
|
||||
Już nauczyliśmy się wykorzystywać sieci neuronowe do pracy z danymi tabelarycznymi oraz z obrazami. Główna różnica między tymi typami danych a tekstem polega na tym, że tekst jest sekwencją o zmiennej długości, podczas gdy rozmiar wejścia w przypadku obrazów jest znany z góry. Sieci splotowe mogą wydobywać wzorce z danych wejściowych, jednak wzorce w tekście są bardziej złożone. Na przykład negacja może być oddzielona od podmiotu przez dowolną liczbę wyrazów (np. *Nie lubię pomarańczy* vs. *Nie lubię tych dużych, kolorowych, smacznych pomarańczy*), a mimo to powinno to być interpretowane jako jeden wzorzec. Aby poradzić sobie z językiem, musimy wprowadzić nowe typy sieci neuronowych, takie jak *sieci rekurencyjne* i *transformery*.
|
||||
|
||||
## Instalacja bibliotek
|
||||
|
||||
Jeśli korzystasz z lokalnej instalacji Pythona do uruchamiania tego kursu, możesz potrzebować zainstalować wszystkie wymagane biblioteki dla NLP za pomocą następujących poleceń:
|
||||
Jeśli korzystasz z lokalnej instalacji Pythona do realizacji tego kursu, może być konieczne zainstalowanie wszystkich wymaganych bibliotek do NLP za pomocą następujących poleceń:
|
||||
|
||||
**Dla PyTorch**
|
||||
```bash
|
||||
pip install -r requirements-torch.txt
|
||||
pip install -r requirements-pytorch.txt
|
||||
```
|
||||
**Dla TensorFlow**
|
||||
```bash
|
||||
|
|
@ -39,13 +39,13 @@ pip install -r requirements-tf.txt
|
|||
|
||||
## Ostrzeżenie dotyczące GPU
|
||||
|
||||
W tej sekcji, w niektórych przykładach będziemy trenować dość duże modele.
|
||||
* **Używaj komputera z obsługą GPU**: Zaleca się uruchamianie notebooków na komputerze z obsługą GPU, aby skrócić czas oczekiwania podczas pracy z dużymi modelami.
|
||||
* **Ograniczenia pamięci GPU**: Uruchamianie na GPU może prowadzić do sytuacji, w których zabraknie pamięci GPU, zwłaszcza podczas trenowania dużych modeli.
|
||||
* **Zużycie pamięci GPU**: Ilość pamięci GPU zużywanej podczas trenowania zależy od różnych czynników, w tym rozmiaru minibatcha.
|
||||
W tej sekcji w niektórych przykładach będziemy trenować całkiem duże modele.
|
||||
* **Używaj komputera z GPU**: Zaleca się uruchamiać notatniki na komputerach z GPU, aby skrócić czas oczekiwania podczas pracy z dużymi modelami.
|
||||
* **Ograniczenia pamięci GPU**: Praca na GPU może prowadzić do sytuacji, w których zabraknie pamięci GPU, zwłaszcza podczas trenowania dużych modeli.
|
||||
* **Zużycie pamięci GPU**: Ilość pamięci GPU zużywanej podczas treningu zależy od różnych czynników, w tym od rozmiaru minibatcha.
|
||||
* **Minimalizuj rozmiar minibatcha**: Jeśli napotkasz problemy z pamięcią GPU, rozważ zmniejszenie rozmiaru minibatcha w swoim kodzie jako potencjalne rozwiązanie.
|
||||
* **Zwolnienie pamięci GPU w TensorFlow**: Starsze wersje TensorFlow mogą nie zwalniać pamięci GPU poprawnie podczas trenowania wielu modeli w jednym jądrze Pythona. Aby skutecznie zarządzać użyciem pamięci GPU, możesz skonfigurować TensorFlow tak, aby alokował pamięć GPU tylko w razie potrzeby.
|
||||
* **Dodanie kodu**: Aby ustawić TensorFlow na dynamiczne przydzielanie pamięci GPU, dodaj poniższy kod do swoich notebooków:
|
||||
* **Zwalnianie pamięci GPU w TensorFlow**: Starsze wersje TensorFlow mogą nie zwalniać poprawnie pamięci GPU podczas trenowania wielu modeli w jednym kernelu Pythona. Aby efektywnie zarządzać użyciem pamięci GPU, możesz skonfigurować TensorFlow tak, aby alokował pamięć GPU tylko wtedy, gdy jest to potrzebne.
|
||||
* **Włączenie kodu**: Aby ustawić TensorFlow tak, by dynamicznie zwiększał przydział pamięci GPU, dodaj następujący kod do swoich notatników:
|
||||
|
||||
```python
|
||||
physical_devices = tf.config.list_physical_devices('GPU')
|
||||
|
|
@ -53,17 +53,21 @@ if len(physical_devices)>0:
|
|||
tf.config.experimental.set_memory_growth(physical_devices[0], True)
|
||||
```
|
||||
|
||||
Jeśli interesuje Cię nauka NLP z perspektywy klasycznego ML, odwiedź [ten zestaw lekcji](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
|
||||
Jeśli chcesz nauczyć się NLP z klasycznej perspektywy ML, odwiedź [tę serię lekcji](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
|
||||
|
||||
## W tej sekcji
|
||||
W tej sekcji nauczymy się:
|
||||
W tej sekcji nauczymy się o:
|
||||
|
||||
* [Reprezentowania tekstu jako tensory](13-TextRep/README.md)
|
||||
* [Osadzeń słów](14-Emdeddings/README.md)
|
||||
* [Modelowania języka](15-LanguageModeling/README.md)
|
||||
* [Rekurencyjnych sieci neuronowych](16-RNN/README.md)
|
||||
* [Sieci generatywnych](17-GenerativeNetworks/README.md)
|
||||
* [Transformerów](18-Transformers/README.md)
|
||||
* [Reprezentowaniu tekstu jako tensory](13-TextRep/README.md)
|
||||
* [Osadzaniu słów (Word Embeddings)](14-Emdeddings/README.md)
|
||||
* [Modelowaniu języka](15-LanguageModeling/README.md)
|
||||
* [Rekurencyjnych sieciach neuronowych](16-RNN/README.md)
|
||||
* [Sieciach generatywnych](17-GenerativeNetworks/README.md)
|
||||
* [Transformerach](18-Transformers/README.md)
|
||||
|
||||
**Zastrzeżenie**:
|
||||
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż staramy się zapewnić dokładność, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Zastrzeżenie**:
|
||||
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -5,6 +5,12 @@
|
|||
"source_file": "AGENTS.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
"CONTRIBUTING.md": {
|
||||
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
|
||||
"translation_date": "2026-07-08T15:26:08+00:00",
|
||||
"source_file": "CONTRIBUTING.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
"README.md": {
|
||||
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
|
||||
"translation_date": "2026-04-06T15:41:18+00:00",
|
||||
|
|
@ -17,6 +23,19 @@
|
|||
"source_file": "SECURITY.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
"__translation_failures__": {
|
||||
"lessons/sketchnotes/LICENSE.md": {
|
||||
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
|
||||
"source_file": "lessons/sketchnotes/LICENSE.md",
|
||||
"language_code": "tr",
|
||||
"failure_date": "2026-07-08T15:19:17+00:00",
|
||||
"status": "failed",
|
||||
"error_type": "TranslationIncompleteError",
|
||||
"error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
|
||||
"translator_version": "0.20.0",
|
||||
"failure_policy_version": 1
|
||||
}
|
||||
},
|
||||
"etc/CODE_OF_CONDUCT.md": {
|
||||
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
|
||||
"translation_date": "2025-08-26T07:40:40+00:00",
|
||||
|
|
@ -54,8 +73,8 @@
|
|||
"language_code": "tr"
|
||||
},
|
||||
"examples/README.md": {
|
||||
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
|
||||
"translation_date": "2025-10-03T11:30:39+00:00",
|
||||
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
|
||||
"translation_date": "2026-07-08T15:15:13+00:00",
|
||||
"source_file": "examples/README.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
|
|
@ -66,8 +85,8 @@
|
|||
"language_code": "tr"
|
||||
},
|
||||
"lessons/0-course-setup/how-to-run.md": {
|
||||
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
|
||||
"translation_date": "2026-01-15T14:33:23+00:00",
|
||||
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
|
||||
"translation_date": "2026-07-08T15:15:34+00:00",
|
||||
"source_file": "lessons/0-course-setup/how-to-run.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
|
|
@ -191,6 +210,12 @@
|
|||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
|
||||
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
|
||||
"translation_date": "2026-07-08T15:06:34+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
|
||||
"language_code": "tr"
|
||||
},
|
||||
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
|
||||
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
|
||||
"translation_date": "2025-08-26T07:31:24+00:00",
|
||||
|
|
@ -330,8 +355,8 @@
|
|||
"language_code": "tr"
|
||||
},
|
||||
"lessons/5-NLP/README.md": {
|
||||
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
|
||||
"translation_date": "2025-08-26T07:19:03+00:00",
|
||||
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
|
||||
"translation_date": "2026-07-08T15:15:59+00:00",
|
||||
"source_file": "lessons/5-NLP/README.md",
|
||||
"language_code": "tr"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
# AI-For-Beginners'a Katkıda Bulunma
|
||||
|
||||
AI-For-Beginners'a katkıda bulunma ilginiz için teşekkürler! Çevirilere, ders düzeltmelerine ve biçimlendirme düzeltmelerine açığız.
|
||||
|
||||
## Microsoft Katkı Sağlayıcı Lisans Sözleşmesi (CLA)
|
||||
|
||||
Bu proje katkılarınızı ve önerilerinizi kabul eder. Çoğu katkı, haklarınızı bize verdiğinizi beyan eden bir Katkı Sağlayıcı Lisans Sözleşmesi (CLA) imzalamanızı gerektirir. Detaylar için [https://cla.microsoft.com](https://cla.microsoft.com) adresini ziyaret edin.
|
||||
|
||||
Bir pull request gönderdiğinizde, CLA-bot otomatik olarak CLA sağlamanız gerekip gerekmediğini belirler ve PR'ı uygun şekilde (örneğin, etiket, yorum) işaretler. Botun verdiği talimatları takip edin. CLA'yı kullanan tüm depolarda bu işlemi yalnızca bir kez yapmanız yeterlidir.
|
||||
|
||||
## Nasıl Katkıda Bulunulur
|
||||
|
||||
### 1. Yazım Hatalarını / Kod Hatalarını Düzeltme
|
||||
Herhangi bir Jupyter defterinde veya ders markdown dosyasında yazım hatası veya hata bulursanız:
|
||||
1. Depoyu çatallayın.
|
||||
2. Yazım hatasını veya bozuk bağlantıyı düzeltin.
|
||||
3. Düzeltmenin açıklamasıyla birlikte bir Pull Request gönderin.
|
||||
|
||||
### 2. Çeviri Gönderme
|
||||
Derslerin diğer dillere çevirilerini memnuniyetle karşılıyoruz! Lütfen çevirileri mevcut klasör isimlerini kullanarak `translations/` dizinine yerleştirin (örneğin `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`).
|
||||
|
||||
Daha fazla detay için [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md) dosyasına bakınız.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,45 +1,45 @@
|
|||
# Yeni Başlayanlar İçin AI Örnekleri
|
||||
# Yeni Başlayanlar İçin Yapay Zeka Örnekleri
|
||||
|
||||
Hoş geldiniz! Bu dizin, yapay zeka ve makine öğrenimine başlamak için basit, bağımsız örnekler içerir. Her örnek, ayrıntılı yorumlar ve adım adım açıklamalarla yeni başlayanlar için uygun şekilde tasarlanmıştır.
|
||||
Hoş geldiniz! Bu dizin, yapay zeka ve makine öğrenimine başlamanıza yardımcı olacak basit, bağımsız örnekler içerir. Her örnek, ayrıntılı yorumlar ve adım adım açıklamalarla yeni başlayan dostu olacak şekilde tasarlanmıştır.
|
||||
|
||||
## 📚 Örneklerin Genel Görünümü
|
||||
## 📚 Örneklerin Genel Bakışı
|
||||
|
||||
| Örnek | Açıklama | Zorluk | Ön Koşullar |
|
||||
|-------|----------|--------|-------------|
|
||||
| [Merhaba AI Dünyası](../../../examples/01-hello-ai-world.py) | İlk yapay zeka programınız - basit desen tanıma | ⭐ Başlangıç | Python temelleri |
|
||||
| [Basit Sinir Ağı](../../../examples/02-simple-neural-network.py) | Sıfırdan bir sinir ağı oluşturun | ⭐⭐ Başlangıç+ | Python, temel matematik |
|
||||
| [Görüntü Sınıflandırıcı](./03-image-classifier.ipynb) | Önceden eğitilmiş bir modelle görüntüleri sınıflandırın | ⭐⭐ Başlangıç+ | Python, numpy |
|
||||
| [Metin Duygusu](../../../examples/04-text-sentiment.py) | Metin duygu analizini yapın (pozitif/negatif) | ⭐⭐ Başlangıç+ | Python |
|
||||
| Örnek | Açıklama | Zorluk | Önkoşullar |
|
||||
|---------|-------------|------------|---------------|
|
||||
| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | İlk yapay zeka programınız - basit desen tanıma | ⭐ Yeni Başlayan | Python temelleri |
|
||||
| [Basit Sinir Ağı](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Baştan bir sinir ağı inşa edin | ⭐⭐ Yeni Başlayan+ | Python, temel matematik |
|
||||
| [Görüntü Sınıflandırıcı](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Önceden eğitilmiş modelle görüntü sınıflandırma | ⭐⭐ Yeni Başlayan+ | Python, numpy |
|
||||
| [Metin Duygu Analizi](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Metin duygu analizi (pozitif/negatif) | ⭐⭐ Yeni Başlayan+ | Python |
|
||||
|
||||
## 🚀 Başlarken
|
||||
|
||||
### Ön Koşullar
|
||||
### Önkoşullar
|
||||
|
||||
Python'un yüklü olduğundan emin olun (3.8 veya daha yüksek sürüm önerilir). Gerekli paketleri yükleyin:
|
||||
Python'un yüklü olduğundan emin olun (3.8 veya daha üstü önerilir). Gerekli paketleri kurun:
|
||||
|
||||
```bash
|
||||
# For Python scripts
|
||||
# Python betikleri için
|
||||
pip install numpy
|
||||
|
||||
# For Jupyter notebooks (image classifier)
|
||||
# Jupyter not defterleri için (görüntü sınıflandırıcı)
|
||||
pip install jupyter numpy pillow tensorflow
|
||||
```
|
||||
|
||||
Ya da ana müfredattan conda ortamını kullanın:
|
||||
Veya ana ders programından conda ortamını kullanın:
|
||||
|
||||
```bash
|
||||
conda env create --name ai4beg --file ../environment.yml
|
||||
conda activate ai4beg
|
||||
```
|
||||
|
||||
### Örnekleri Çalıştırma
|
||||
### Örnekleri Çalıştırmak
|
||||
|
||||
**Python dosyaları (.py):**
|
||||
**Python scriptleri (.py dosyaları) için:**
|
||||
```bash
|
||||
python 01-hello-ai-world.py
|
||||
```
|
||||
|
||||
**Jupyter defterleri (.ipynb):**
|
||||
**Jupyter not defterleri (.ipynb dosyaları) için:**
|
||||
```bash
|
||||
jupyter notebook 03-image-classifier.ipynb
|
||||
```
|
||||
|
|
@ -48,38 +48,40 @@ jupyter notebook 03-image-classifier.ipynb
|
|||
|
||||
Örnekleri sırasıyla takip etmenizi öneririz:
|
||||
|
||||
1. **"Merhaba AI Dünyası" ile başlayın** - Desen tanımanın temellerini öğrenin
|
||||
2. **Basit bir Sinir Ağı oluşturun** - Sinir ağlarının nasıl çalıştığını anlayın
|
||||
3. **Görüntü Sınıflandırıcıyı deneyin** - Gerçek görüntülerle yapay zekayı görün
|
||||
4. **Metin Duygusu Analizi yapın** - Doğal dil işleme dünyasını keşfedin
|
||||
1. **"Hello AI World" ile başlayın** - Desen tanımanın temellerini öğrenin
|
||||
2. **Basit Bir Sinir Ağı Kurun** - Sinir ağlarının nasıl çalıştığını anlayın
|
||||
3. **Görüntü Sınıflandırıcıyı Deneyin** - Gerçek görüntülerle yapay zekayı görün
|
||||
4. **Metin Duygu Analizini Yapın** - Doğal dil işlemede keşfedin
|
||||
|
||||
## 💡 Yeni Başlayanlar İçin İpuçları
|
||||
|
||||
- **Kod yorumlarını dikkatlice okuyun** - Her satırın ne yaptığını açıklar
|
||||
- **Deneyin!** - Değerleri değiştirin ve sonuçları görün
|
||||
- **Her şeyi anlamaya çalışmayın** - Öğrenmek zaman alır
|
||||
- **Kod yorumlarını dikkatle okuyun** - Her satırın ne yaptığını açıklar
|
||||
- **Deney yapın!** - Değerleri değiştirip ne olduğunu görün
|
||||
- **Her şeyi anlamaya çalışırken endişelenmeyin** - Öğrenmek zaman alır
|
||||
- **Sorular sorun** - [Tartışma panosunu](https://github.com/microsoft/AI-For-Beginners/discussions) kullanın
|
||||
|
||||
## 🔗 Sonraki Adımlar
|
||||
|
||||
Bu örnekleri tamamladıktan sonra tam müfredatı keşfedin:
|
||||
- [AI'ye Giriş](../lessons/1-Intro/README.md)
|
||||
Bu örnekleri tamamladıktan sonra tam ders programını keşfedin:
|
||||
- [Yapay Zekaya Giriş](../lessons/1-Intro/README.md)
|
||||
- [Sinir Ağları](../lessons/3-NeuralNetworks/README.md)
|
||||
- [Bilgisayarlı Görü](../lessons/4-ComputerVision/README.md)
|
||||
- [Bilgisayarla Görme](../lessons/4-ComputerVision/README.md)
|
||||
- [Doğal Dil İşleme](../lessons/5-NLP/README.md)
|
||||
|
||||
## 🤝 Katkıda Bulunma
|
||||
|
||||
Bu örnekleri faydalı buldunuz mu? Geliştirmemize yardımcı olun:
|
||||
- Sorunları bildirin veya iyileştirme önerilerinde bulunun
|
||||
- Sorunları bildirin veya geliştirme önerin
|
||||
- Yeni başlayanlar için daha fazla örnek ekleyin
|
||||
- Belgeleri ve yorumları geliştirin
|
||||
- Dokümantasyon ve yorumları iyileştirin
|
||||
|
||||
---
|
||||
|
||||
*Unutmayın: Her uzman bir zamanlar yeni başkandı. İyi öğrenmeler! 🎓*
|
||||
*Unutmayın: Her uzman bir zamanlar acemiydi. İyi öğrenmeler! 🎓*
|
||||
|
||||
---
|
||||
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul edilmez.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
# Kodu Çalıştırma
|
||||
# Kodu Nasıl Çalıştırılır
|
||||
|
||||
Bu müfredat, çalıştırmak isteyebileceğiniz birçok yürütülebilir örnek ve laboratuvar içerir. Bunu yapmak için, bu müfredatın parçası olarak sağlanan Jupyter Not defterlerinde Python kodu çalıştırma yeteneğine ihtiyacınız vardır. Kodu çalıştırmak için birkaç seçeneğiniz vardır:
|
||||
Bu müfredat, çalıştırmak isteyeceğiniz birçok yürütülebilir örnek ve laboratuvar içermektedir. Bunu yapabilmek için, bu müfredatın bir parçası olarak sağlanan Jupyter Notebooks içinde Python kodu çalıştırma yeteneğine sahip olmanız gerekir. Kodu çalıştırmak için birkaç seçeneğiniz vardır:
|
||||
|
||||
## Bilgisayarınızda Yerel Olarak Çalıştırma
|
||||
|
||||
Kodu bilgisayarınızda yerel olarak çalıştırmak için Python kurulumu gereklidir. Tavsiye edilenlerden biri **[miniconda](https://conda.io/en/latest/miniconda.html)** yüklemektir - bu, farklı Python **sanal ortamları** için `conda` paket yöneticisini destekleyen oldukça hafif bir kurulumdur.
|
||||
Kodu bilgisayarınızda yerel olarak çalıştırmak için, bir Python kurulumu gereklidir. Bir öneri **[miniconda](https://conda.io/en/latest/miniconda.html)** kurmaktır - bu, farklı Python **sanal ortamları** için `conda` paket yöneticisini destekleyen oldukça hafif bir kurulumdur.
|
||||
|
||||
Miniconda'yı yükledikten sonra, depoyu klonlayın ve bu ders için kullanılacak bir sanal ortam oluşturun:
|
||||
Miniconda'yı kurduktan sonra, depo klonlayın ve bu kurs için kullanılacak bir sanal ortam oluşturun:
|
||||
|
||||
```bash
|
||||
git clone http://github.com/microsoft/ai-for-beginners
|
||||
|
|
@ -15,19 +15,19 @@ conda env create --name ai4beg --file .devcontainer/environment.yml
|
|||
conda activate ai4beg
|
||||
```
|
||||
|
||||
### Visual Studio Code ile Python Eklentisi Kullanımı
|
||||
### Visual Studio Code ve Python Eklentisi ile Kullanma
|
||||
|
||||
Bu müfredat, en iyi şekilde [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) içindeki [Python Eklentisi](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) ile açıldığında kullanılır.
|
||||
Bu müfredat, [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) ve [Python Eklentisi](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) ile açıldığında en iyi şekilde kullanılır.
|
||||
|
||||
> **Not**: Depoyu klonlayıp VS Code’da dizini açtıktan sonra, Python eklentilerini yüklemenizi otomatik olarak önerecektir. Ayrıca yukarıda anlatıldığı gibi miniconda'yı da yüklemeniz gerekecektir.
|
||||
> **Not**: Depoyu klonlayıp dizini VS Code'da açtığınızda, Python uzantılarını yüklemenizi otomatik olarak önerir. Ayrıca yukarıda açıklandığı gibi miniconda'yı da kurmanız gerekir.
|
||||
|
||||
> **Not**: VS Code, depoyu bir konteyner içinde yeniden açmanızı önerirse, yerel Python kurulumunu kullanmak için bunu reddetmelisiniz.
|
||||
|
||||
### Tarayıcıda Jupyter Kullanımı
|
||||
### Tarayıcıda Jupyter Kullanma
|
||||
|
||||
Ayrıca kendi bilgisayarınızda tarayıcıdan Jupyter ortamı kullanabilirsiniz. Hem klasik Jupyter hem de JupyterHub, otomatik tamamlama, kod vurgulama gibi özelliklerle kullanışlı bir geliştirme ortamı sağlar.
|
||||
Kendi bilgisayarınızda tarayıcı üzerinden Jupyter ortamı da kullanabilirsiniz. Klasik Jupyter ve JupyterHub, otomatik tamamlama, kod vurgulama vb. özelliklerle kullanışlı bir geliştirme ortamı sunar.
|
||||
|
||||
Jupyter'ı yerel olarak başlatmak için ders dizinine gidin ve şunu yürütün:
|
||||
Jupyter'ı yerel olarak başlatmak için, kurs dizinine gidin ve şunu çalıştırın:
|
||||
|
||||
```bash
|
||||
jupyter notebook
|
||||
|
|
@ -36,36 +36,36 @@ jupyter notebook
|
|||
```bash
|
||||
jupyterhub
|
||||
```
|
||||
Daha sonra herhangi bir `.ipynb` dosyasına gidip açabilir ve çalışmaya başlayabilirsiniz.
|
||||
Ardından `.ipynb` dosyalarından herhangi birine gidip açabilir ve çalışmaya başlayabilirsiniz.
|
||||
|
||||
### Konteynerde Çalıştırma
|
||||
### Konteyner İçinde Çalıştırma
|
||||
|
||||
Python kurulumu yapmak yerine, kodu bir konteynerde çalıştırmak bir alternatiftir. Depomuz, bu depo için nasıl bir konteyner oluşturulacağını gösteren özel bir `.devcontainer` klasörü sağlar ve VS Code, kodu bir konteynerde yeniden açma fırsatı sunar. Bunun için Docker kurulumu gerekir ve biraz daha karmaşıktır, bu yüzden daha deneyimli kullanıcılara tavsiye edilir.
|
||||
Python kurulumu yerine kodu bir konteyner içinde çalıştırmak da bir alternatiftir. Depomuz, bu depo için bir konteyner nasıl oluşturulacağını belirten özel bir `.devcontainer` klasörü sağladığından, VS Code kodu bir konteyner içinde yeniden açma olanağı sunar. Bu Docker kurulumu gerektirir ve daha karmaşık olabilir, bu yüzden daha deneyimli kullanıcılar için tavsiye ederiz.
|
||||
|
||||
## Bulutta Çalıştırma
|
||||
|
||||
Python'u yerel olarak kurmak istemiyorsanız ve bazı bulut kaynaklarına erişiminiz varsa - kodu bulutta çalıştırmak iyi bir alternatif olabilir. Bunu yapmanın birkaç yolu vardır:
|
||||
Python'ı yerel olarak kurmak istemiyorsanız ve bazı bulut kaynaklarına erişiminiz varsa, kodu bulutta çalıştırmak iyi bir alternatif olacaktır. Bunu yapabileceğiniz birkaç yol vardır:
|
||||
|
||||
* **[GitHub Codespaces](https://github.com/features/codespaces)** kullanmak, GitHub üzerinde sizin için oluşturulan, VS Code tarayıcı arayüzü ile erişilebilen sanal bir ortamdır. Eğer Codespaces erişiminiz varsa, depoda **Code** düğmesine tıklayabilir, bir codespace başlatabilir ve kısa sürede çalışmaya başlayabilirsiniz.
|
||||
* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** kullanmak. [Binder](https://mybinder.org), GitHub’daki bazı kodları denemeniz için bulutta ücretsiz hesaplama kaynakları sunar. Ana sayfada depoyu Binder'da açmak için bir düğme vardır - bu sizi hızla binder sitesine götürür, alt yapısında bir konteyner oluşturur ve sorunsuzca Jupyter web arayüzünü başlatır.
|
||||
* GitHub üzerinde sizin için oluşturulan ve VS Code tarayıcı arayüzüyle erişilen bir sanal ortam olan **[GitHub Codespaces](https://github.com/features/codespaces)** kullanmak. Eğer Codespaces erişiminiz varsa, depoda **Code** butonuna tıklayıp bir codespace başlatarak hemen çalışmaya başlayabilirsiniz.
|
||||
* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** kullanmak. [Binder](https://mybinder.org), GitHub'daki bazı kodları test etmek isteyenler için bulut üzerinden ücretsiz hesaplama kaynakları sunar. Ana sayfada depoyu Binder'da açmak için bir buton vardır – bu sizi hızla binder sitesine götürür, arka planda bir konteyner oluşturur ve sorunsuz bir Jupyter web arayüzü başlatır.
|
||||
|
||||
> **Not**: Kötüye kullanımı önlemek için, Binder bazı web kaynaklarına erişimi engellemiştir. Bu, modelleri ve/veya veri setlerini genel İnternetten çeken bazı kodların çalışmasını engelleyebilir. Bazı çözümler bulmanız gerekebilir. Ayrıca, Binder tarafından sağlanan hesaplama kaynakları oldukça temel seviyededir, bu nedenle eğitim özellikle daha karmaşık sonraki derslerde yavaş olacaktır.
|
||||
> **Not**: Kötüye kullanımı engellemek için, Binder bazı web kaynaklarına erişimi engeller. Bu, modelleri ve/veya veri setlerini genel Internet'ten alan bazı kodların çalışmasını engelleyebilir. Bazı çözümler bulmanız gerekebilir. Ayrıca, Binder tarafından sağlanan hesaplama kaynakları oldukça basit olduğundan, özellikle sonraki daha karmaşık derslerde eğitim yavaş olacaktır.
|
||||
|
||||
## GPU ile Bulutta Çalıştırma
|
||||
|
||||
Bu müfredattaki bazı ileri dersler GPU desteğinden çok fayda sağlar. Örneğin model eğitimi aksi halde çok yavaş olabilir. Özellikle [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) veya kurumunuz aracılığıyla buluta erişiminiz varsa, takip edebileceğiniz birkaç seçenek vardır:
|
||||
Bu müfredattaki bazı ileri dersler GPU desteğinden büyük ölçüde faydalanacaktır. Örneğin model eğitimi, aksi takdirde çok yavaş olabilir. Özellikle [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) veya kurumunuz vasıtasıyla buluta erişiminiz varsa, takip edebileceğiniz birkaç seçenek vardır:
|
||||
|
||||
* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) oluşturun ve Jupyter üzerinden bağlanın. Depoyu doğrudan bu makineye klonlayabilir ve öğrenmeye başlayabilirsiniz. NC-serisi VM’ler GPU desteğine sahiptir.
|
||||
* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) oluşturup Jupyter aracılığıyla bağlanmak. Ardından depoyu makineye klonlayıp öğrenmeye başlayabilirsiniz. NC-serisi VM'ler GPU desteğine sahiptir.
|
||||
|
||||
> **Not**: Azure for Students dahil bazı abonelikler kutudan çıktığı gibi GPU desteği sağlamaz. Ek GPU çekirdeği için teknik destek talebi yapmanız gerekebilir.
|
||||
> **Not**: Azure for Students dahil bazı abonelikler kutudan çıkar çıkmaz GPU desteği sağlamaz. Ek GPU çekirdeği talebinde bulunmak için teknik destek isteğinde bulunmanız gerekebilir.
|
||||
|
||||
* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) oluşturun ve oradaki Notebook özelliğini kullanın. [Bu video](https://azure-for-academics.github.io/quickstart/azureml-papers/) bir depoyu Azure ML dizinine nasıl klonlayacağınızı ve kullanmaya başlayacağınızı gösterir.
|
||||
* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) oluşturup oradaki Notebook özelliğini kullanmak. [Bu video](https://azure-for-academics.github.io/quickstart/azureml-papers/) Azure ML notebook içine depo klonlama ve kullanmaya başlama gösterir.
|
||||
|
||||
Ayrıca Google Colab kullanabilirsiniz; ücretsiz GPU desteğiyle gelir ve Jupyter Not defterlerini oraya yükleyip tek tek çalıştırabilirsiniz.
|
||||
Ayrıca, biraz ücretsiz GPU desteği ile gelen Google Colab'i kullanabilir ve Jupyter Notebooks'ları oraya yükleyip tek tek çalıştırabilirsiniz.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba gösterilse de, otomatik çevirilerin hatalar veya yanlışlıklar içerebileceğini lütfen unutmayınız. Orijinal belge, kendi ana dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çeviri kullanımı sonucunda oluşabilecek herhangi bir yanlış anlama veya yorumlama için sorumluluk kabul edilmemektedir.
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -4,11 +4,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Önceden Eğitilmiş Modeller ve Transfer Öğrenimi\n",
|
||||
"# Önceden eğitilmiş modeller ve transfer öğrenme\n",
|
||||
"\n",
|
||||
"CNN'leri (Convolutional Neural Networks) eğitmek çok zaman alabilir ve bu görev için çok fazla veri gereklidir. Ancak, bu sürenin büyük bir kısmı, bir ağın görüntülerden desenler çıkarmak için kullandığı en iyi düşük seviyeli filtreleri öğrenmekle harcanır. Doğal bir soru ortaya çıkar - bir veri kümesi üzerinde eğitilmiş bir sinir ağını alıp, tamamen yeniden eğitmeden farklı görüntüleri sınıflandırmak için adapte edebilir miyiz?\n",
|
||||
"CNN'leri eğitmek çok zaman alabilir ve bu görev için çok fazla veri gereklidir. Ancak çoğu zaman, bir ağın görüntülerden desenler çıkarmak için kullandığı en iyi düşük seviyeli filtreleri öğrenmekle geçer. Doğal bir soru ortaya çıkar - bir veri seti üzerinde eğitilmiş bir sinir ağını kullanıp, tam eğitim süreci olmadan farklı görüntüleri sınıflandırmaya uyarlayabilir miyiz?\n",
|
||||
"\n",
|
||||
"Bu yaklaşım **transfer öğrenimi** olarak adlandırılır, çünkü bir sinir ağı modelinden diğerine bir miktar bilgi transfer ederiz. Transfer öğreniminde genellikle büyük bir görüntü veri kümesi, örneğin **ImageNet**, üzerinde eğitilmiş bir önceden eğitilmiş modelle başlarız. Bu modeller, genel görüntülerden farklı özellikler çıkarmada zaten iyi bir iş çıkarabilir ve çoğu durumda, bu çıkarılan özelliklerin üzerine bir sınıflandırıcı inşa etmek iyi bir sonuç verebilir.\n"
|
||||
"Bu yaklaşıma **transfer öğrenme** denir, çünkü bazı bilgileri bir sinir ağı modelinden diğerine aktarırız. Transfer öğrenmede, genellikle önceden eğitilmiş bir modelle başlarız; bu model, örneğin **ImageNet** gibi büyük bir görüntü veri seti üzerinde eğitilmiştir. Bu modeller, genel görüntülerden farklı özellikleri çıkarmada zaten iyi iş çıkarabilir ve birçok durumda bu çıkarılan özelliklerin üzerine bir sınıflandırıcı inşa etmek iyi bir sonuç verebilir.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -31,9 +31,9 @@
|
|||
"source": [
|
||||
"## Kediler ve Köpekler Veri Seti\n",
|
||||
"\n",
|
||||
"Bu bölümde, kediler ve köpeklerin görüntülerini sınıflandırma gibi gerçek bir problemi çözeceğiz. Bu amaçla, [Kaggle Kediler ve Köpekler Veri Seti](https://www.kaggle.com/c/dogs-vs-cats) kullanacağız, ayrıca [Microsoft'tan](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) indirilebilir.\n",
|
||||
"Bu ünitede, kediler ve köpeklerin görüntülerini sınıflandırma gibi gerçek bir hayat problemini çözeceğiz. Bu nedenle, [Kaggle Kediler ve Köpekler Veri Seti](https://www.kaggle.com/c/dogs-vs-cats) kullanacağız, bu set aynı zamanda [Microsoft'tan da indirilebilir](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
|
||||
"\n",
|
||||
"Hadi bu veri setini indirip `data` dizinine çıkaralım (bu işlem biraz zaman alabilir!):\n"
|
||||
"Bu veri setini indirip `data` dizinine çıkaralım (bu işlem biraz zaman alabilir!):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ne yazık ki, veri kümesinde bazı bozuk görüntü dosyaları var. Bozuk dosyaları kontrol etmek için hızlı bir temizlik yapmamız gerekiyor. Bu eğitimi bozmamak için veri kümesini doğrulama kodunu bir modüle taşıdık.\n"
|
||||
"Ne yazık ki, veri kümesinde bazı bozuk görüntü dosyaları var. Bozuk dosyaları kontrol etmek için hızlı bir temizlik yapmamız gerekiyor. Bu öğreticiyi bozmamak için, veri kümesini doğrulama kodunu bir modüle taşıdık.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -333,13 +333,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Veri Setini Yükleme\n",
|
||||
"## Veri Kümesini Yükleme\n",
|
||||
"\n",
|
||||
"Önceki örneklerde, Keras'a dahil edilmiş veri setlerini yüklüyorduk. Şimdi ise kendi veri setimizle çalışacağız ve bunu bir görüntü dizininden yüklememiz gerekiyor.\n",
|
||||
"Önceki örneklerde, Keras'a yerleşik veri kümelerini yüklüyorduk. Şimdi ise görüntülerden oluşan bir dizinden yüklememiz gereken kendi veri kümemizle ilgileneceğiz.\n",
|
||||
"\n",
|
||||
"Gerçek hayatta, görüntü veri setlerinin boyutu oldukça büyük olabilir ve tüm verilerin belleğe sığabileceğine güvenilemez. Bu nedenle, veri setleri genellikle eğitim için uygun minibatch'ler halinde veri döndürebilen **jeneratörler** olarak temsil edilir.\n",
|
||||
"Gerçek hayatta, görüntü veri kümelerinin boyutu oldukça büyük olabilir ve tüm verilerin belleğe sığacağına güvenilemez. Bu nedenle, veri kümeleri genellikle eğitim için uygun minibatch'ler halinde veri döndürebilen **üreteçler** olarak temsil edilir.\n",
|
||||
"\n",
|
||||
"Görüntü sınıflandırmasıyla başa çıkmak için Keras, farklı sınıflara karşılık gelen alt dizinlerden görüntüleri yükleyebilen özel bir `image_dataset_from_directory` fonksiyonunu içerir. Bu fonksiyon ayrıca görüntüleri ölçeklendirme işlemini de gerçekleştirir ve veri setini eğitim ve test alt kümelerine bölebilir:\n"
|
||||
"Görüntü sınıflandırmasıyla ilgilenmek için, Keras farklı sınıflara karşılık gelen alt dizinlerden görüntüleri yükleyebilen özel `image_dataset_from_directory` işlevini içerir. Bu işlev ayrıca görüntüleri ölçeklendirme işlemini de yapar ve veri kümesini eğitim ve test alt kümelerine bölebilir:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -383,9 +383,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Aynı `seed` değerini her iki çağrı için de ayarlamak önemlidir, çünkü bu, görüntülerin eğitim ve test veri seti arasında nasıl bölüneceğini etkiler.\n",
|
||||
"İki çağrı için de aynı `seed` değerini ayarlamak önemlidir, çünkü bu değer görüntülerin eğitim ve test veri kümeleri arasında bölünmesini etkiler.\n",
|
||||
"\n",
|
||||
"Veri seti, sınıf adlarını otomatik olarak dizinlerden alır ve gerekirse bunlara şu şekilde erişebilirsiniz:\n"
|
||||
"Veri kümesi sınıf isimlerini otomatik olarak dizinlerden alır ve gerekirse şu şekilde erişebilirsiniz:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Elde ettiğimiz veri setleri, modeli eğitmek için doğrudan `fit` fonksiyonuna geçirilebilir. Bunlar, hem ilgili görüntüleri hem de etiketleri içerir ve aşağıdaki yapı kullanılarak döngüye alınabilir:\n"
|
||||
"Elde ettiğimiz veri setleri, modeli eğitmek için doğrudan `fit` fonksiyonuna iletilebilir. Bunlar, aşağıdaki yapı kullanılarak döngü ile gezilebilen ilgili resimler ve etiketler içerir:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -453,16 +453,16 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **Not**: Veri kümesindeki tüm görüntüler, 0-255 aralığında kayan nokta tensörleri olarak temsil edilir. Bu değerleri sinir ağına geçirmeden önce 0-1 aralığına ölçeklendirmemiz gerekir. Görüntüleri çizerken, aynı işlemi yapmamız veya değerleri `int` türüne dönüştürmemiz gerekir (yukarıdaki kodda yaptığımız gibi), böylece `matplotlib`'e orijinal ölçeklenmemiş görüntüyü çizmek istediğimizi gösterebiliriz.\n"
|
||||
"> **Not**: Veri kümesindeki tüm görüntüler, 0-255 aralığında kayan nokta tensörleri olarak temsil edilir. Sinir ağına geçirmeden önce, bu değerleri 0-1 aralığına ölçeklendirmemiz gerekir. Görüntüleri çizerken, ya aynı işlemi yapmamız ya da değerleri `int` türüne dönüştürmemiz gerekir (yukarıdaki kodda yaptığımız gibi), böylece `matplotlib`'e orijinal ölçeklenmemiş görüntüyü çizmek istediğimizi gösterebiliriz.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Önceden Eğitilmiş Modeller\n",
|
||||
"## Önceden eğitilmiş modeller\n",
|
||||
"\n",
|
||||
"Birçok görüntü sınıflandırma görevi için önceden eğitilmiş sinir ağı modelleri bulunabilir. Bu modellerin birçoğu `keras.applications` alanında mevcuttur ve daha fazla modele İnternet üzerinden ulaşılabilir. Şimdi en basit VGG-16 modelinin nasıl yüklendiğini ve kullanıldığını görelim:\n"
|
||||
"Birçok görüntü sınıflandırma görevi için önceden eğitilmiş sinir ağı modelleri bulunabilir. Bu modellerin birçoğu `keras.applications` isim alanı içinde mevcuttur ve daha fazla model İnternette bulunabilir. En basit VGG-16 modelinin nasıl yükleneceğine ve kullanılacağına bakalım:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -497,7 +497,17 @@
|
|||
}
|
||||
],
|
||||
"source": [
|
||||
"vgg = keras.applications.VGG16()\n",
|
||||
"# SHA-256 of VGG16 weights (with top)\n",
|
||||
"VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n",
|
||||
"\n",
|
||||
"_weights_path = keras.utils.get_file(\n",
|
||||
" 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
|
||||
" 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
|
||||
" file_hash=VGG16_WEIGHTS_SHA256,\n",
|
||||
" hash_algorithm='sha256',\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"vgg = keras.applications.VGG16(weights=_weights_path)\n",
|
||||
"inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n",
|
||||
"\n",
|
||||
"res = vgg(inp)\n",
|
||||
|
|
@ -511,16 +521,16 @@
|
|||
"metadata": {},
|
||||
"source": [
|
||||
"Burada birkaç önemli nokta var:\n",
|
||||
"* Herhangi bir önceden eğitilmiş ağın girişine bir veri göndermeden önce, belirli bir şekilde ön işleme yapılması gerekir. Bu işlem, ilgili `preprocess_input` fonksiyonunu çağırarak gerçekleştirilir. Bu fonksiyon, bir görüntü grubunu alır ve onların işlenmiş halini geri döndürür. VGG-16 durumunda, görüntüler normalize edilir ve her kanal için önceden tanımlanmış bir ortalama değer çıkarılır. Bunun nedeni, VGG-16'nın başlangıçta bu ön işleme ile eğitilmiş olmasıdır.\n",
|
||||
"* Sinir ağı, giriş grubuna uygulanır ve sonuç olarak her sınıfın olasılığını gösteren 1000 öğeli tensörlerden oluşan bir grup elde ederiz. Bu tensör üzerinde `argmax` çağrılarak en olası sınıf numarasını bulabiliriz.\n",
|
||||
"* Elde edilen sonuç bir [`ImageNet` sınıf numarasıdır](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Bu sonucu anlamlandırmak için, `decode_predictions` fonksiyonunu kullanabiliriz. Bu fonksiyon, en üst n sınıfı ve onların isimlerini birlikte döndürür.\n"
|
||||
"* Önceden eğitilmiş herhangi bir ağa girdi vermeden önce, belirli bir şekilde ön işleme tabi tutulması gerekir. Bu, bir dizi görüntüyü alan ve işlenmiş biçimlerini döndüren ilgili `preprocess_input` fonksiyonunun çağrılmasıyla yapılır. VGG-16 durumu için, görüntüler normalize edilir ve her kanal için önceden tanımlanmış ortalama bir değer çıkarılır. Bunun sebebi, VGG-16'nın orijinal olarak bu ön işleme ile eğitilmiş olmasıdır.\n",
|
||||
"* Sinir ağı girdi dizisine uygulanır ve sonuç olarak her sınıfın olasılığını gösteren 1000 öğeli tensörler dizisi elde edilir. Bu tensör üzerinde `argmax` çağrısı yaparak en olası sınıf numarasını bulabiliriz.\n",
|
||||
"* Elde edilen sonuç bir [ImageNet sınıfının numarasıdır](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Bu sonucu anlamlandırmak için, en üst n sınıfı ve isimlerini döndüren `decode_predictions` fonksiyonunu da kullanabiliriz.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Haydi VGG-16 ağının mimarisini de görelim:\n"
|
||||
"VGG-16 ağının mimarisine de bakalım:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -599,7 +609,7 @@
|
|||
"source": [
|
||||
"## GPU hesaplamaları\n",
|
||||
"\n",
|
||||
"VGG-16 ve diğer daha modern mimariler gibi derin sinir ağları, çalıştırılmak için oldukça fazla hesaplama gücü gerektirir. Eğer mevcutsa, GPU hızlandırmasını kullanmak mantıklıdır. Neyse ki, Keras, GPU mevcut olduğunda hesaplamaları otomatik olarak hızlandırır. Tensorflow'un GPU kullanıp kullanamadığını aşağıdaki kod ile kontrol edebiliriz:\n"
|
||||
"VGG-16 gibi derin sinir ağları ve diğer daha modern mimariler çalıştırmak için oldukça fazla hesaplama gücü gerektirir. Mümkünse GPU hızlandırması kullanmak mantıklıdır. Neyse ki, Keras eğer varsa GPU üzerinde hesaplamaları otomatik olarak hızlandırır. Tensorflow'un GPU kullanıp kullanamadığını aşağıdaki kod ile kontrol edebiliriz:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -626,9 +636,10 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## VGG Özelliklerini Çıkarmak\n",
|
||||
"\n",
|
||||
"Eğer VGG-16'yı görüntülerimizden özellik çıkarmak için kullanmak istiyorsak, son sınıflandırma katmanları olmadan modele ihtiyacımız var. Üst katmanlar olmadan VGG-16 modelini şu kodla oluşturabiliriz:\n"
|
||||
"## VGG özelliklerini çıkarma\n",
|
||||
"\n",
|
||||
"Görüntülerimizden özellik çıkarmak için VGG-16 modelini kullanmak istiyorsak, son sınıflandırma katmanları olmayan modele ihtiyacımız var. VGG-16 modelini üst katmanlar olmadan bu kodu kullanarak oluşturabiliriz:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -680,9 +691,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Özellik tensörünün boyutu 7x7x512, ancak bunu görselleştirebilmek için 2D forma dönüştürmemiz gerekti.\n",
|
||||
"Özellik tensörünün boyutu 7x7x512, ancak bunu görselleştirmek için yeniden şekillendirerek 2B forma getirmemiz gerekti.\n",
|
||||
"\n",
|
||||
"Şimdi bu özelliklerin görüntüleri sınıflandırmak için kullanılıp kullanılamayacağını görelim. Manuel olarak bazı görüntüleri (bizim durumumuzda 50 minibatch) alıp, bunların özellik vektörlerini önceden hesaplayalım. Bunun için Tensorflow **dataset** API'sini kullanabiliriz. `map` fonksiyonu bir veri kümesini alır ve verilen lambda fonksiyonunu uygulayarak onu dönüştürür. Bu mekanizmayı kullanarak, orijinal görüntüler yerine VGG tarafından çıkarılan özellikleri içeren yeni veri kümeleri, `ds_features_train` ve `ds_features_test`, oluşturuyoruz.\n"
|
||||
"Şimdi bu özelliklerin görüntü sınıflandırmak için kullanılıp kullanılamayacağını görelim. Görüntülerin bir bölümünü (bizim örneğimizde 50 mini parti) manuel olarak alıp, özellik vektörlerini önceden hesaplayacağız. Bunu yapmak için Tensorflow **dataset** API'sini kullanabiliriz. `map` fonksiyonu, bir veri setini alır ve onu dönüştürmek için verilen lambda fonksiyonunu uygular. Bu mekanizmayı, orijinal görüntüler yerine VGG tarafından çıkarılmış özellikleri içeren yeni veri setleri `ds_features_train` ve `ds_features_test` oluşturmak için kullanıyoruz.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -712,9 +723,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Veri kümesini sınırlamak ve gösterimizi hızlandırmak için `.take(50)` yapısını kullandık. Elbette bu deneyi tam veri kümesi üzerinde gerçekleştirebilirsiniz.\n",
|
||||
"Hızlı bir gösterim yapmak için veri seti boyutunu sınırlamak adına `.take(50)` yapısını kullandık. Elbette bu deneyi tam veri seti üzerinde gerçekleştirebilirsiniz.\n",
|
||||
"\n",
|
||||
"Artık çıkarılmış özelliklere sahip bir veri kümesine sahibiz, kediler ve köpekler arasında ayrım yapmak için basit bir yoğun sınıflandırıcı eğitebiliriz. Bu ağ, (7,7,512) şeklindeki özellik vektörünü alacak ve bir köpeğe veya bir kediye karşılık gelen bir çıktı üretecek. Bu bir ikili sınıflandırma olduğu için `sigmoid` aktivasyon fonksiyonunu ve `binary_crossentropy` kaybını kullanıyoruz.\n"
|
||||
"Artık çıkarılmış özelliklere sahip bir veri setimiz olduğuna göre, kediler ve köpekler arasında ayırt yapacak basit bir yoğun sınıflandırıcı eğitebiliriz. Bu ağ, şekli (7,7,512) olan özellik vektörünü alacak ve köpek ya da kediye karşılık gelen tek bir çıktı üretecektir. İkili sınıflandırma olduğu için `sigmoid` aktivasyon fonksiyonu ile `binary_crossentropy` kaybını kullanıyoruz.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -743,13 +754,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Sonuç harika, bir kedi ile köpeği neredeyse %95 olasılıkla ayırt edebiliyoruz! Ancak, bu yaklaşımı yalnızca tüm görüntülerin bir alt kümesinde test ettik, çünkü manuel özellik çıkarımı oldukça zaman alıyor gibi görünüyor.\n",
|
||||
"Sonuç mükemmel, neredeyse %95 olasılıkla bir kediyi ve köpeği ayırt edebiliyoruz! Ancak, bu yaklaşımı tüm görüntülerin yalnızca bir alt kümesi üzerinde test ettik, çünkü manuel özellik çıkarımı çok zaman alıyor gibi görünüyor.\n",
|
||||
"\n",
|
||||
"## Bir VGG ağı kullanarak transfer öğrenimi\n",
|
||||
"## Bir VGG ağı kullanarak transfer öğrenme\n",
|
||||
"\n",
|
||||
"Manuel olarak özellikleri önceden hesaplamaktan kaçınmak için, eğitim sırasında orijinal VGG-16 ağını bir bütün olarak kullanabiliriz. Bunun için ağımıza bir özellik çıkarıcıyı ilk katman olarak ekleyebiliriz.\n",
|
||||
"Eğitim sırasında özellik çıkarıcıyı ağımızın ilk katmanı olarak ekleyerek, orijinal VGG-16 ağını bütünüyle kullanarak özellikleri manuel olarak önceden hesaplamaktan da kaçınabiliriz.\n",
|
||||
"\n",
|
||||
"Keras mimarisinin güzelliği, yukarıda tanımladığımız VGG-16 modelinin başka bir sinir ağı içinde bir katman olarak da kullanılabilmesidir! Tek yapmamız gereken, üzerine yoğun bir sınıflandırıcı ekleyerek bir ağ oluşturmak ve ardından tüm ağı geri yayılım kullanarak eğitmek.\n"
|
||||
"Keras mimarisinin güzelliği, yukarıda tanımladığımız VGG-16 modelinin başka bir sinir ağında bir katman olarak da kullanılabilmesidir! Üstüne yoğun bir sınıflandırıcı olan bir ağ oluşturup ardından tüm ağı geri yayılım kullanarak eğitmemiz yeterlidir.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -793,13 +804,13 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Bu model, bir görüntüyü alıp sınıfını döndüren uçtan uca bir sınıflandırma ağı gibi görünüyor. Ancak, burada zor olan şey, VGG16'nın bir özellik çıkarıcı olarak çalışmasını istememiz ve yeniden eğitilmemesi gerektiğidir. Bu nedenle, **konvolüsyonel özellik çıkarıcının ağırlıklarını dondurmamız** gerekiyor. Ağın ilk katmanına `model.layers[0]` çağrısıyla erişebiliriz ve sadece `trainable` özelliğini `False` olarak ayarlamamız yeterlidir.\n",
|
||||
"Bu model, bir resmi alıp sınıfını döndüren uçtan uca bir sınıflandırma ağı gibi görünüyor. Ancak, işin püf noktası, VGG16'nın bir özellik çıkarıcı olarak çalışmasını istememiz ve yeniden eğitilmemesi gerektiğidir. Bu nedenle, **evrişimsel özellik çıkarıcının ağırlıklarını dondurmamız** gerekiyor. Ağa ilk katmana `model.layers[0]` çağrısıyla erişebiliriz ve sadece `trainable` özelliğini `False` olarak ayarlamamız yeterlidir. \n",
|
||||
"\n",
|
||||
"> **Not**: Özellik çıkarıcının ağırlıklarının dondurulması gereklidir, çünkü aksi takdirde eğitilmemiş sınıflandırıcı katmanı, konvolüsyonel çıkarıcının önceden eğitilmiş ağırlıklarını bozabilir.\n",
|
||||
"> **Not**: Özellik çıkarıcının ağırlıklarının dondurulması gereklidir çünkü aksi halde eğitilmemiş sınıflandırıcı katmanı, önceden eğitilmiş evrişimsel çıkarıcının orijinal ağırlıklarını bozabilir. \n",
|
||||
"\n",
|
||||
"Ağımızdaki toplam parametre sayısının yaklaşık 15 milyon olduğunu fark edebilirsiniz, ancak yalnızca 25 bin parametreyi eğitiyoruz. Üst düzey konvolüsyonel filtrelerin diğer tüm parametreleri önceden eğitilmiştir. Bu iyi bir şey, çünkü daha az sayıda parametreyi daha az sayıda örnekle ince ayar yapabiliyoruz.\n",
|
||||
"Ağımızdaki toplam parametre sayısının yaklaşık 15 milyon civarında olduğunu fark edebilirsiniz, ancak sadece 25 bin parametreyi eğitiyoruz. Üst düzey evrişimsel filtrelerin diğer tüm parametreleri önceden eğitilmiştir. Bu iyidir çünkü daha az sayıda parametreyi daha az sayıda örnekle ince ayar yapabiliyoruz. \n",
|
||||
"\n",
|
||||
"Şimdi ağımızı eğiteceğiz ve ne kadar iyi sonuç alabileceğimizi göreceğiz. Oldukça uzun bir çalışma süresi bekleyin ve yürütme bir süre donmuş gibi görünüyorsa endişelenmeyin.\n"
|
||||
"Şimdi ağımızı eğiteceğiz ve ne kadar iyi sonuç alabileceğimize bakacağız. Oldukça uzun bir çalışma süresi bekleyin ve yürütmenin bir süre donmuş gibi görünmesi sizi endişelendirmesin. \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -824,7 +835,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Görünüşe göre oldukça doğru bir kedi ve köpek sınıflandırıcısı elde ettik!\n",
|
||||
"Görünüşe göre oldukça doğru bir kedi ve köpek sınıflandırıcı elde ettik! \n",
|
||||
"\n",
|
||||
"## Modeli Kaydetme ve Yükleme\n",
|
||||
"\n",
|
||||
|
|
@ -852,7 +863,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Modeli dosyadan istediğiniz zaman yükleyebiliriz. Bir sonraki deneyin modeli bozması durumunda faydalı bulabilirsiniz - baştan başlamanız gerekmez.\n"
|
||||
"Modeli istediğiniz zaman dosyadan yükleyebilirsiniz. Sonraki deneyi model bozarsa bunu faydalı bulabilirsiniz - sıfırdan yeniden başlamanız gerekmez.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -868,15 +879,15 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Transfer öğrenimini ince ayar yapma\n",
|
||||
"## İnce Ayar Transfer Öğrenimi\n",
|
||||
"\n",
|
||||
"Önceki bölümde, kendi veri setimizdeki görüntüleri sınıflandırmak için son sınıflandırıcı katmanını eğittik. Ancak, özellik çıkarıcıyı yeniden eğitmedik ve modelimiz ImageNet verilerinde öğrendiği özelliklere güvendi. Eğer nesneleriniz sıradan ImageNet görüntülerinden görsel olarak farklıysa, bu özellik kombinasyonu en iyi şekilde çalışmayabilir. Bu nedenle, evrişimli katmanları da eğitmeye başlamak mantıklı olacaktır.\n",
|
||||
"Önceki bölümde, kendi veri setimizdeki görüntüleri sınıflandırmak için son sınıflandırıcı katmanı eğittik. Ancak, özellik çıkarıcıyı yeniden eğitmedik ve modelimiz, ImageNet verisinde öğrenilen özelliklere dayanıyordu. Nesneleriniz sıradan ImageNet görüntülerinden görsel olarak farklıysa, bu özellik kombinasyonu en iyi sonuç vermeyebilir. Bu nedenle, konvolüsyonel katmanların da eğitilmeye başlanması mantıklıdır.\n",
|
||||
"\n",
|
||||
"Bunu yapmak için, daha önce dondurduğumuz evrişimli filtre parametrelerini serbest bırakabiliriz.\n",
|
||||
"Bunu yapmak için, daha önce dondurduğumuz konvolüsyonel filtre parametrelerini çözebiliriz.\n",
|
||||
"\n",
|
||||
"> **Not:** Öncelikle parametreleri dondurmanız ve sınıflandırma katmanındaki ağırlıkları stabilize etmek için birkaç eğitim döngüsü gerçekleştirmeniz önemlidir. Eğer parametreleri serbest bırakılmış bir şekilde uçtan uca ağ eğitimine hemen başlarsanız, büyük hatalar evrişimli katmanlardaki önceden eğitilmiş ağırlıkları bozabilir.\n",
|
||||
"> **Not:** Öncelikle parametreleri dondurmak ve sınıflandırma katmanında ağırlıkları dengelemek için birkaç epoch eğitim yapmak önemlidir. Parametreleri dondurmadan uçtan uca ağın hemen eğitilmesine başlanırsa, büyük hatalar konvolüsyonel katmanlardaki önceden eğitilmiş ağırlıkları bozabilir.\n",
|
||||
"\n",
|
||||
"Evrişimli VGG-16 modelimiz ilk katmanın içinde yer alıyor ve kendi içinde birçok katmandan oluşuyor. Yapısına bir göz atabiliriz:\n"
|
||||
"Konvolüsyonel VGG-16 modelimiz ilk katmanın içinde yer almakta ve kendi içerisinde birçok katmandan oluşmaktadır. Yapısına bir göz atabiliriz:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -945,7 +956,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Konvolüsyonel tabanın tüm katmanlarını çözebiliriz:\n"
|
||||
"Konvolüsyon tabanının tüm katmanlarını çözebiliriz:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -961,7 +972,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ancak, hepsini birden çözmek en iyi fikir değildir. Öncelikle sadece birkaç son konvolüsyon katmanını çözebiliriz, çünkü bunlar görüntülerimiz için ilgili olan daha yüksek seviyeli desenleri içerir. Örneğin, başlangıç olarak, son 4 katman hariç tüm katmanları dondurabiliriz:\n"
|
||||
"Ancak, hepsini birden çözmek en iyi fikir değil. Öncelikle, görüntülerimizle ilgili daha yüksek seviyedeki desenleri içeren sadece birkaç son katmanı çözebiliriz. Örneğin, işe başlamak için, son 4 katman hariç tüm katmanları dondurabiliriz: \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1000,11 +1011,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Eğitilebilir parametrelerin sayısının önemli ölçüde arttığını gözlemleyin, ancak yine de tüm parametrelerin yaklaşık %50'si civarında.\n",
|
||||
"Eğitilebilir parametre sayısının önemli ölçüde arttığını gözlemleyin, ancak hala tüm parametrelerin yaklaşık %50'si civarındadır.\n",
|
||||
"\n",
|
||||
"Dondurma işlemini kaldırdıktan sonra, birkaç dönem daha eğitim yapabiliriz (örneğimizde sadece bir dönem yapacağız). Ayrıca, önceden eğitilmiş ağırlıklar üzerindeki etkileri en aza indirmek için daha düşük bir öğrenme oranı seçebilirsiniz. Ancak, düşük öğrenme oranıyla bile, eğitimin başlangıcında doğruluğun düşmesini bekleyebilirsiniz; bu durum, sabit ağırlıklar durumuna kıyasla biraz daha yüksek bir seviyeye ulaşana kadar devam eder.\n",
|
||||
"Dondurmayı kaldırdıktan sonra, birkaç epoch daha eğitim yapabiliriz (örneğimizde sadece bir tane yapacağız). Önceden eğitilmiş ağırlıklar üzerindeki etkisini en aza indirmek için daha düşük öğrenme oranı da seçebilirsiniz. Ancak, düşük öğrenme oranıyla bile, eğitim başladığında doğruluğun düşmesini bekleyebilirsiniz; sonunda sabit ağırlıklar durumundan biraz daha yüksek bir seviyeye ulaşır.\n",
|
||||
"\n",
|
||||
"> **Not:** Bu eğitim çok daha yavaş gerçekleşir, çünkü ağın birçok katmanı boyunca gradyanları geri yaymamız gerekir!\n"
|
||||
"> **Not:** Bu eğitim çok daha yavaş gerçekleşir, çünkü ağırlıkları birçok katman boyunca geriye doğru yaymamız gerekir!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1028,18 +1039,18 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Daha güçlü bir ağ ve daha fazla parametre kullandığımız için muhtemelen daha yüksek bir eğitim doğruluğu elde edeceğiz, ancak doğrulama doğruluğu bu kadar artmayabilir.\n",
|
||||
"Daha fazla parametreye sahip daha güçlü bir ağ kullandığımız için muhtemelen daha yüksek eğitim doğruluğuna ulaşacağız, ancak doğrulama doğruluğu o kadar artmayacaktır.\n",
|
||||
"\n",
|
||||
"Ağın birkaç katmanını daha serbest bırakıp daha fazla eğiterek daha yüksek bir doğruluk elde edip edemeyeceğinizi görmekten çekinmeyin!\n"
|
||||
"Daha yüksek doğruluk elde edip edemeyeceğinizi görmek için ağın birkaç katmanını daha serbest bırakıp daha fazla eğitmekten çekinmeyin!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Diğer bilgisayarlı görü modelleri\n",
|
||||
"## Diğer bilgisayarla görme modelleri\n",
|
||||
"\n",
|
||||
"VGG-16, en basit bilgisayarlı görü mimarilerinden biridir. Keras, birçok başka önceden eğitilmiş ağ sunar. Bunlar arasında en sık kullanılanlar, Microsoft tarafından geliştirilen **ResNet** mimarileri ve Google tarafından geliştirilen **Inception** modelidir. Örneğin, en basit ResNet-50 modelinin mimarisini inceleyelim (ResNet, farklı derinliklere sahip bir model ailesidir; gerçekten derin bir modelin nasıl göründüğünü görmek isterseniz ResNet-152 ile denemeler yapabilirsiniz):\n"
|
||||
"VGG-16, en basit bilgisayarla görme mimarilerinden biridir. Keras birçok daha fazla önceden eğitilmiş ağ sağlar. Bunlar arasında en sık kullanılanlar Microsoft tarafından geliştirilen **ResNet** mimarileri ve Google tarafından geliştirilen **Inception**dır. Örneğin, en basit ResNet-50 modelinin mimarisini keşfedelim (ResNet, farklı derinlikte modellere sahip bir aile olup, gerçekten derin bir modelin nasıl göründüğünü görmek isterseniz ResNet-152 ile deneme yapabilirsiniz):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1441,29 +1452,29 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Modelin, aynı tanıdık yapı taşlarını içerdiğini görebilirsiniz: evrişim katmanları, havuzlama katmanları ve son yoğun sınıflandırıcı. Bu modeli, transfer öğrenimi için VGG-16'yı kullandığımız şekilde tam olarak aynı şekilde kullanabiliriz. Yukarıdaki kodla farklı ResNet modellerini temel model olarak kullanarak denemeler yapabilir ve doğruluğun nasıl değiştiğini görebilirsiniz.\n",
|
||||
"Gördüğünüz gibi, model aynı tanıdık yapı taşlarını içeriyor: konvolüsyon katmanları, havuzlama katmanları ve son yoğun sınıflandırıcı. Bu modeli tam olarak VGG-16'yı transfer öğrenimi için kullandığımız şekilde kullanabiliriz. Yukarıdaki kodla farklı ResNet modellerini temel model olarak kullanarak denemeler yapabilir ve doğruluğun nasıl değiştiğini görebilirsiniz.\n",
|
||||
"\n",
|
||||
"## Batch Normalization (Toplu Normalizasyon)\n",
|
||||
"## Batch Normalization\n",
|
||||
"\n",
|
||||
"Bu ağ, başka bir katman türü daha içerir: **Batch Normalization (Toplu Normalizasyon)**. Toplu normalizasyon fikri, sinir ağı boyunca akan değerleri doğru aralığa getirmektir. Genellikle sinir ağları, tüm değerler [-1,1] veya [0,1] aralığında olduğunda en iyi şekilde çalışır ve bu nedenle giriş verilerimizi buna göre ölçeklendirir/normallaştiririz. Ancak, derin bir ağın eğitimi sırasında, değerlerin bu aralıktan önemli ölçüde çıkması durumu oluşabilir ve bu da eğitimi sorunlu hale getirir. Toplu normalizasyon katmanı, mevcut minibatch'teki tüm değerler için ortalama ve standart sapmayı hesaplar ve sinyali bir sinir ağı katmanından geçirmeden önce normalleştirmek için bunları kullanır. Bu, derin ağların kararlılığını önemli ölçüde artırır.\n"
|
||||
"Bu ağ ayrıca başka bir tür katman içeriyor: **Batch Normalization** (Toplu Normalizasyon). Batch normalization’ın amacı, sinir ağı boyunca akan değerleri doğru aralığa getirmektir. Genellikle sinir ağları en iyi performansı, tüm değerler [-1,1] veya [0,1] aralığında olduğunda gösterir ve bu yüzden giriş verilerimizi uygun şekilde ölçeklendirir/normalleştiririz. Ancak derin bir ağın eğitimi sırasında, değerlerin bu aralığın çok dışına çıkması olabilir ki bu da eğitimi problematik hale getirir. Batch normalization katmanı tüm mevcut minibatch’in ortalamasını ve standart sapmasını hesaplar ve sinyali bir sinir ağı katmanından geçirmeden önce bunları kullanarak normalleştirir. Bu, derin ağların kararlılığını önemli ölçüde artırır.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Özet\n",
|
||||
"## Çıkarım\n",
|
||||
"\n",
|
||||
"Transfer öğrenimini kullanarak, özel nesne sınıflandırma görevimiz için hızlı bir şekilde bir sınıflandırıcı oluşturmayı başardık ve yüksek doğruluk elde ettik. Ancak, bu örnek tamamen adil değildi çünkü orijinal VGG-16 ağı, kedileri ve köpekleri tanımak için önceden eğitilmişti ve bu nedenle ağda zaten mevcut olan desenlerin çoğunu yeniden kullanıyorduk. Bir fabrikadaki üretim hattındaki detaylar veya farklı ağaç yaprakları gibi daha egzotik ve alanına özgü nesnelerde daha düşük doğruluk bekleyebilirsiniz.\n",
|
||||
"Transfer öğrenmeyi kullanarak, özel nesne sınıflandırma görevimiz için hızlıca bir sınıflandırıcı oluşturduk ve yüksek doğruluk elde ettik. Ancak, bu örnek tamamen adil değildi çünkü orijinal VGG-16 ağı, kedileri ve köpekleri tanımak için önceden eğitilmişti; dolayısıyla ağda zaten bulunan çoğu kalıbı tekrar kullanmış olduk. Bir tesisin üretim hattındaki detaylar veya farklı ağaç yaprakları gibi daha egzotik, alan-spesifik nesnelerde daha düşük doğruluk bekleyebilirsiniz.\n",
|
||||
"\n",
|
||||
"Gördüğünüz gibi, şu anda çözdüğümüz daha karmaşık görevler daha yüksek hesaplama gücü gerektiriyor ve CPU üzerinde kolayca çözülemiyor. Bir sonraki bölümde, aynı modeli daha düşük hesaplama kaynakları kullanarak eğitmek için daha hafif bir uygulama kullanmayı deneyeceğiz ve bu, yalnızca biraz daha düşük doğrulukla sonuçlanacak.\n"
|
||||
"Şu anda çözdüğümüz daha karmaşık görevlerin daha yüksek hesaplama gücü gerektirdiğini ve CPU üzerinde kolayca çözülemeyeceğini görebilirsiniz. Bir sonraki bölümde, biraz daha düşük doğrulukla sonuçlanan aynı modeli daha az hesaplama kaynağı kullanarak eğitmek için daha hafif bir uygulama kullanmayı deneyeceğiz.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Feragatname**: \nBu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.\n"
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Feragatname**:\nBu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1484,12 +1495,6 @@
|
|||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.10"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "c189abc107848f96051085cc30945129",
|
||||
"translation_date": "2025-08-28T13:06:11+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
|
||||
"language_code": "tr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
|
|
|||
|
|
@ -1,51 +1,51 @@
|
|||
# Doğal Dil İşleme
|
||||
|
||||

|
||||

|
||||
|
||||
Bu bölümde, **Doğal Dil İşleme (NLP)** ile ilgili görevleri çözmek için Sinir Ağlarını kullanmaya odaklanacağız. Bilgisayarların çözmesini istediğimiz birçok NLP problemi bulunmaktadır:
|
||||
Bu bölümde, **Doğal Dil İşleme (NLP)** ile ilgili görevleri ele almak için Sinir Ağları kullanmaya odaklanacağız. Bilgisayarların çözebilmesini istediğimiz birçok NLP problemi vardır:
|
||||
|
||||
* **Metin sınıflandırma**, metin dizileriyle ilgili tipik bir sınıflandırma problemidir. Örnekler arasında e-posta mesajlarını spam veya spam değil olarak sınıflandırmak ya da makaleleri spor, iş, politika gibi kategorilere ayırmak yer alır. Ayrıca, sohbet botları geliştirirken, genellikle bir kullanıcının ne söylemek istediğini anlamamız gerekir -- bu durumda **niyet sınıflandırması** ile ilgileniyoruz. Niyet sınıflandırmasında genellikle birçok kategoriyle uğraşmamız gerekir.
|
||||
* **Duygu analizi**, bir cümlenin anlamının ne kadar olumlu/olumsuz olduğunu belirten bir sayı (duygu) atamamız gereken tipik bir regresyon problemidir. Duygu analizinin daha gelişmiş bir versiyonu olan **özellik tabanlı duygu analizi** (ABSA), duygu durumunu tüm cümleye değil, farklı bölümlerine (özelliklere) atar, örneğin: *Bu restoranda mutfağı beğendim, ama atmosfer berbattı*.
|
||||
* **Adlandırılmış Varlık Tanıma** (NER), metinden belirli varlıkları çıkarmakla ilgilidir. Örneğin, *Yarın Paris'e uçmam gerekiyor* cümlesinde *yarın* kelimesinin TARİH'e, *Paris* kelimesinin ise KONUM'a atıfta bulunduğunu anlamamız gerekebilir.
|
||||
* **Anahtar kelime çıkarımı**, NER'e benzer, ancak belirli varlık türleri için önceden eğitim yapmadan, cümlenin anlamı için önemli olan kelimeleri otomatik olarak çıkarmamız gerekir.
|
||||
* **Metin kümeleme**, benzer cümleleri bir araya getirmek istediğimizde faydalı olabilir, örneğin teknik destek konuşmalarında benzer talepleri gruplamak.
|
||||
* **Soru yanıtlama**, bir modelin belirli bir soruya yanıt verebilme yeteneğini ifade eder. Model, bir metin parçası ve bir soruyu giriş olarak alır ve sorunun cevabının metinde bulunduğu yeri sağlaması (veya bazen cevap metnini oluşturması) gerekir.
|
||||
* **Metin oluşturma**, bir modelin yeni metin oluşturma yeteneğidir. Bu, bir *metin ipucu* temelinde bir sonraki harf/kelimeyi tahmin eden bir sınıflandırma görevi olarak düşünülebilir. GPT-3 gibi gelişmiş metin oluşturma modelleri, [ipucu programlama](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) veya [ipucu mühendisliği](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) adı verilen bir teknik kullanarak sınıflandırma gibi diğer NLP görevlerini çözebilir.
|
||||
* **Metin özetleme**, bir bilgisayarın uzun bir metni "okuyup" birkaç cümleyle özetlemesini istediğimiz bir tekniktir.
|
||||
* **Makine çevirisi**, bir dildeki metni anlamayı ve başka bir dilde metin oluşturmayı birleştiren bir görev olarak görülebilir.
|
||||
* **Metin sınıflandırması**, metin dizileriyle ilgili tipik bir sınıflandırma problemidir. Örnekler arasında e-posta mesajlarını spam ve spam olmayan olarak sınıflandırmak ya da makaleleri spor, iş, politika gibi kategorilere ayırmak vardır. Ayrıca, sohbet botları geliştirirken, bir kullanıcının ne söylemek istediğini anlamamız gerekir - bu durumda **niyet sınıflandırması** ile ilgileniyoruz. Niyet sınıflandırmasında genellikle birçok kategoriyle başa çıkmamız gerekir.
|
||||
* **Duygu analizi**, tipik bir regresyon problemidir; burada bir cümlenin anlamının ne kadar olumlu/olumsuz olduğunu ifade eden bir sayı (duygu) atamamız gerekir. Duygu analizinin daha gelişmiş bir versiyonu, tüm cümleye değil, cümlenin farklı bölümlerine (yönlere) duygu atadığımız **yönebazlı duygu analizi** (ABSA)dır, örneğin *Bu restoranda mutfağı sevdim, ama atmosfer berbattı*.
|
||||
* **Adlandırılmış Varlık Tanıma** (NER), metinden belirli varlıkları çıkarmakla ilgilidir. Örneğin, *Yarın Paris'e uçmam gerekiyor* ifadesinde *yarın* kelimesinin TARİH, *Paris* kelimesinin KONUM olduğunu anlamamız gerekebilir.
|
||||
* **Anahtar kelime çıkarımı** NER'e benzer, ancak belirli varlık türleri için önceden eğitim almadan, cümlenin anlamı için önemli kelimeleri otomatik olarak çıkarmamız gerekir.
|
||||
* **Metin kümeleme**, benzer cümleleri bir araya getirmek istediğimizde faydalı olabilir; örneğin, teknik destek konuşmalarındaki benzer talepler.
|
||||
* **Soru yanıtlama**, bir modelin belirli bir soruya cevap verme yeteneğine denir. Model bir metin parçası ve bir soru alır, ardından sorunun cevabının bulunduğu metin yerini sağlaması (veya bazen cevap metnini üretmesi) gerekir.
|
||||
* **Metin üretimi**, bir modelin yeni metin oluşturma yeteneğidir. Bu, bir *metin istemi* temelinde bir sonraki harfi/kelimeyi tahmin eden bir sınıflandırma görevi olarak düşünülebilir. GPT-3 gibi gelişmiş metin üretim modelleri, [prompt programlama](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) veya [prompt mühendisliği](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) olarak adlandırılan bir teknik kullanarak sınıflandırma gibi diğer NLP görevlerini de çözebilir.
|
||||
* **Metin özetleme**, uzun bir metni "okuyup" birkaç cümleye özetlemek istediğimiz bir tekniktir.
|
||||
* **Makine çevirisi**, bir dildeki metni anlama ve başka bir dilde metin üretme birleşimi olarak görülebilir.
|
||||
|
||||
Başlangıçta, çoğu NLP görevi dilbilgisi gibi geleneksel yöntemlerle çözülüyordu. Örneğin, makine çevirisinde, başlangıç cümlesi bir sözdizimi ağacına dönüştürmek için ayrıştırıcılar kullanılıyor, ardından cümlenin anlamını temsil etmek için daha yüksek seviyeli anlamsal yapılar çıkarılıyor ve bu anlam ve hedef dilin dilbilgisine dayanarak sonuç oluşturuluyordu. Günümüzde, birçok NLP görevi sinir ağları kullanılarak daha etkili bir şekilde çözülmektedir.
|
||||
Başlangıçta, çoğu NLP görevi dil bilgisi gibi geleneksel yöntemlerle çözülüyordu. Örneğin makine çevirisinde parsers, ilk cümleyi sözdizimi ağacına dönüştürmek için kullanılır, sonra cümlenin anlamını temsil eden daha yüksek düzeyde anlamsal yapılar çıkarılırdı ve bu anlama ile hedef dilin dil bilgisi temel alınarak sonuç oluşturulurdu. Günümüzde birçok NLP görevi sinir ağları kullanılarak daha etkili şekilde çözülmektedir.
|
||||
|
||||
> Birçok klasik NLP yöntemi, [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python kütüphanesinde uygulanmıştır. Farklı NLP görevlerinin NLTK kullanılarak nasıl çözülebileceğini kapsayan harika bir [NLTK Kitabı](https://www.nltk.org/book/) çevrimiçi olarak mevcuttur.
|
||||
> Birçok klasik NLP yöntemi, [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python kitaplığında uygulanmıştır. Çevrimiçi erişilebilen harika bir [NLTK Kitabı](https://www.nltk.org/book/) vardır ve kitap NLTK ile farklı NLP görevlerinin nasıl çözülebileceğini kapsar.
|
||||
|
||||
Kursumuzda, çoğunlukla NLP için Sinir Ağlarını kullanmaya odaklanacağız ve gerektiğinde NLTK kullanacağız.
|
||||
Kursumuzda çoğunlukla NLP için Sinir Ağları kullanmaya odaklanacağız ve gerektiğinde NLTK kullanacağız.
|
||||
|
||||
Tablo verileri ve görüntülerle çalışmak için sinir ağlarını kullanmayı zaten öğrendik. Bu veri türleri ile metin arasındaki temel fark, metnin değişken uzunlukta bir dizi olmasıdır, oysa görüntülerde giriş boyutu önceden bilinir. Konvolüsyonel ağlar giriş verilerinden desenler çıkarabilirken, metindeki desenler daha karmaşıktır. Örneğin, olumsuzluk, özneyle birçok kelime arasında ayrılabilir (örneğin: *Portakalları sevmiyorum* ile *O büyük renkli lezzetli portakalları sevmiyorum*), ve bu yine de tek bir desen olarak yorumlanmalıdır. Bu nedenle, dili işlemek için *tekrarlayan ağlar* ve *dönüştürücüler* gibi yeni sinir ağı türlerini tanıtmamız gerekir.
|
||||
Daha önce tablolarla ve görüntülerle çalışmak için sinir ağlarını kullanmayı öğrendik. Bu tür veriler ile metin arasındaki temel fark, metnin değişken uzunlukta bir dizi olmasıdır, oysa görüntülerde giriş boyutu önceden bellidir. Konvolüsyonel ağlar giriş verisinden desenler çıkarabilirken, metindeki desenler daha karmaşıktır. Örneğin, olumsuzlama çok kelimeden ayrılarak gelebilir (örn. *Portakalları sevmiyorum* vs. *O büyük renkli lezzetli portakalları sevmiyorum*), ama bu hala tek bir desen olarak yorumlanmalıdır. Bu yüzden dil işlemek için *geri dönüşümlü ağlar* ve *transformerlar* gibi yeni sinir ağı türleri getirmeliyiz.
|
||||
|
||||
## Kütüphaneleri Yükleme
|
||||
|
||||
Bu kursu yerel bir Python kurulumunda çalıştırıyorsanız, NLP için gerekli tüm kütüphaneleri aşağıdaki komutlarla yüklemeniz gerekebilir:
|
||||
Bu kursu yerel Python kurulumuyla çalıştırıyorsanız, NLP için gereken tüm kütüphaneleri aşağıdaki komutlarla yüklemeniz gerekebilir:
|
||||
|
||||
**PyTorch için**
|
||||
```bash
|
||||
pip install -r requirements-torch.txt
|
||||
pip install -r requirements-pytorch.txt
|
||||
```
|
||||
**TensorFlow için**
|
||||
```bash
|
||||
pip install -r requirements-tf.txt
|
||||
```
|
||||
|
||||
> TensorFlow ile NLP'yi [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) üzerinde deneyebilirsiniz.
|
||||
> TensorFlow ile NLP’yi [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) üzerinde deneyebilirsiniz.
|
||||
|
||||
## GPU Uyarısı
|
||||
|
||||
Bu bölümde, bazı örneklerde oldukça büyük modelleri eğiteceğiz.
|
||||
* **GPU Destekli Bilgisayar Kullanın**: Büyük modellerle çalışırken bekleme sürelerini azaltmak için not defterlerinizi GPU destekli bir bilgisayarda çalıştırmanız önerilir.
|
||||
* **GPU Bellek Sınırlamaları**: GPU'da çalışmak, özellikle büyük modelleri eğitirken GPU belleğinizin tükenmesine neden olabilir.
|
||||
* **GPU Bellek Tüketimi**: Eğitim sırasında tüketilen GPU belleği, minibatch boyutu gibi çeşitli faktörlere bağlıdır.
|
||||
* **Minibatch Boyutunu Azaltın**: GPU bellek sorunlarıyla karşılaşırsanız, kodunuzdaki minibatch boyutunu azaltmayı düşünebilirsiniz.
|
||||
* **TensorFlow GPU Bellek Serbest Bırakma**: TensorFlow'un eski sürümleri, bir Python çekirdeğinde birden fazla model eğitildiğinde GPU belleğini doğru şekilde serbest bırakmayabilir. GPU bellek kullanımını etkili bir şekilde yönetmek için TensorFlow'u yalnızca gerektiğinde GPU belleği tahsis edecek şekilde yapılandırabilirsiniz.
|
||||
* **Kod Ekleme**: TensorFlow'un GPU belleği tahsisini yalnızca gerektiğinde büyütmesini sağlamak için not defterlerinize aşağıdaki kodu ekleyin:
|
||||
Bu bölümde bazı örneklerde oldukça büyük modelleri eğiteceğiz.
|
||||
* **GPU Destekli Bilgisayar Kullanın**: Büyük modellerle çalışırken bekleme sürelerini azaltmak için defterlerinizi GPU destekli bir bilgisayarda çalıştırmanız önerilir.
|
||||
* **GPU Bellek Sınırlamaları**: GPU üzerinde çalıştırmak, özellikle büyük modeller eğitildiğinde GPU bellek tükenmesine yol açabilir.
|
||||
* **GPU Bellek Tüketimi**: Eğitim sırasında tüketilen GPU belleği; minibatch boyutu gibi çeşitli faktörlere bağlıdır.
|
||||
* **Minibatch Boyutunu Azaltın**: GPU bellek sorunlarıyla karşılaşırsanız, kodunuzdaki minibatch boyutunu azaltmayı çözüm olarak düşünebilirsiniz.
|
||||
* **TensorFlow GPU Bellek Serbest Bırakma**: TensorFlow’un eski sürümleri, bir Python kernelinde birden fazla model eğitirken GPU belleğini doğru şekilde serbest bırakmayabilir. GPU bellek kullanımını etkili şekilde yönetmek için TensorFlow’u yalnızca ihtiyaç duyulduğunda GPU belleğini tahsis edecek şekilde yapılandırabilirsiniz.
|
||||
* **Kod Ekleme**: TensorFlow’un GPU bellek tahsisini sadece gerektiğinde artıracak şekilde ayarlamak için defterlerinize aşağıdaki kodu ekleyin:
|
||||
|
||||
```python
|
||||
physical_devices = tf.config.list_physical_devices('GPU')
|
||||
|
|
@ -53,17 +53,21 @@ if len(physical_devices)>0:
|
|||
tf.config.experimental.set_memory_growth(physical_devices[0], True)
|
||||
```
|
||||
|
||||
Klasik ML perspektifinden NLP öğrenmekle ilgileniyorsanız, [bu dersler dizisini](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) ziyaret edin.
|
||||
Klasik ML bakış açısından NLP öğrenmek isterseniz, [bu ders setini](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) ziyaret edin.
|
||||
|
||||
## Bu Bölümde
|
||||
Bu bölümde şunları öğreneceğiz:
|
||||
|
||||
* [Metni tensörler olarak temsil etme](13-TextRep/README.md)
|
||||
* [Kelime Gömüleri](14-Emdeddings/README.md)
|
||||
* [Dil Modelleme](15-LanguageModeling/README.md)
|
||||
* [Tekrarlayan Sinir Ağları](16-RNN/README.md)
|
||||
* [Üretken Ağlar](17-GenerativeNetworks/README.md)
|
||||
* [Dönüştürücüler](18-Transformers/README.md)
|
||||
* [Kelime Gömme](14-Emdeddings/README.md)
|
||||
* [Dil Modellemesi](15-LanguageModeling/README.md)
|
||||
* [Geri Dönüşümlü Sinir Ağları](16-RNN/README.md)
|
||||
* [Üretici Ağlar](17-GenerativeNetworks/README.md)
|
||||
* [Transformerlar](18-Transformers/README.md)
|
||||
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**Feragatname**:
|
||||
Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
Loading…
Reference in New Issue