Obiective
În această lecție, veți învăța:
- Ce este deep learning și ce sunt rețelele neuronale
- Introducere în TensorFlow și Keras
- Crearea și antrenarea unei rețele neuronale simple folosind Keras
- Construirea și antrenarea unei rețele neuronale convoluționale (CNN) pentru recunoașterea imaginilor
- Evaluarea și îmbunătățirea performanței modelelor de deep learning
1. Ce este deep learning și ce sunt rețelele neuronale
Deep learning este o subcategorie a machine learning-ului care se bazează pe rețele neuronale artificiale pentru a învăța reprezentări ale datelor în mod ierarhic și pentru a face predicții sau decizii. Rețelele neuronale sunt modele matematice inspirate de structura și funcționarea neuronilor din creierul biologic.
2. Introducere în TensorFlow și Keras
TensorFlow este o bibliotecă open-source dezvoltată de Google pentru calcul numeric și machine learning, având suport pentru deep learning. Keras este o interfață de înalt nivel pentru TensorFlow, care permite construirea și antrenarea modelelor de deep learning într-un mod mai simplu și mai ușor de înțeles.
Pentru a începe lucrul cu TensorFlow și Keras, trebuie să le instalați:
pip install tensorflow
3. Crearea și antrenarea unei rețele neuronale simple folosind Keras
3.1. Încărcarea și pregătirea datelor
În acest exemplu, vom utiliza setul de date MNIST, care conține imagini de mână ale cifrelor de la 0 la 9. Setul de date poate fi încărcat direct din Keras:
from tensorflow.keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
Pentru a pregăti datele, trebuie să le normalizăm și să le transformăm în forma potrivită pentru rețeaua neuronală:
X_train = X_train / 255.0
X_test = X_test / 255.0
# Redimensionarea datelor pentru a fi compatibile cu modelul
X_train = X_train.reshape(-1, 28 * 28)
X_test = X_test.reshape(-1, 28 * 28)
3.2. Construirea și antrenarea modelului
Pentru a construi și antrena o rețea neuronală folosind Keras, trebuie să definiți arhitectura modelului și să configurați procesul de antrenare:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import SparseCategoricalCrossentropy
from tensorflow.keras.metrics import SparseCategoricalAccuracy
# Definirea arhitecturii modelului
model = Sequential([
Dense(128, activation='relu', input_shape=(28 * 28,)),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])
# Configurarea procesului de antrenare
model.compile(optimizer=Adam(),
loss=SparseCategoricalCrossentropy(),
metrics=[SparseCategoricalAccuracy()])
# Antrenarea modelului
history = model.fit(X_train, y_train, epochs=10, validation_split=0.2)
3.3. Evaluarea modelului
După antrenare, modelul poate fi evaluat pe setul de testare pentru a vedea cât de bine funcționează:
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f'Test accuracy: {test_acc}')
4. Construirea și antrenarea unei rețele neuronale convoluționale (CNN) pentru recunoașterea imaginilor
Rețelele neuronale convoluționale (CNN) sunt o clasă specială de rețele neuronale care funcționează bine pentru analiza imaginilor. În acest exemplu, vom construi și antrena o CNN pentru recunoașterea cifrelor scrise de mână folosind setul de date MNIST.
4.1. Pregătirea datelor
Deoarece CNN folosește straturi convoluționale 2D, trebuie să redimensionăm datele de intrare pentru a avea dimensiunea corectă:
X_train = X_train.reshape(-1, 28, 28, 1)
X_test = X_test.reshape(-1, 28, 28, 1)
4.2. Construirea și antrenarea modelului CNN
Pentru a construi și antrena o CNN, vom adăuga straturi convoluționale și de pooling înainte de straturile Dense:
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten
# Definirea arhitecturii modelului
model = Sequential([
Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, kernel_size=(3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
# Configurarea procesului de antrenare
model.compile(optimizer=Adam(),
loss=SparseCategoricalCrossentropy(),
metrics=[SparseCategoricalAccuracy()])
# Antrenarea modelului
history = model.fit(X_train, y_train, epochs=10, validation_split=0.2)
4.3. Evaluarea modelului CNN
După antrenare, modelul poate fi evaluat pe setul de testare pentru a vedea cât de bine funcționează:
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f'Test accuracy: {test_acc}')
5. Evaluarea și îmbunătățirea performanței modelelor de deep learning
Pentru a evalua performanța modelului și a identifica posibilele îmbunătățiri, puteți utiliza următoarele tehnici:
- Analiza curbelor de învățare: Utilizați datele din
historypentru a genera grafice ale evoluției acurateții și a funcției de pierdere în timpul antrenării și validării. - Regularizarea: Adăugați tehnici de regularizare, cum ar fi dropout sau regularizarea L1/L2, pentru a preveni overfitting-ul.
- Ajustarea hiperparametrilor: Experimentați cu diferiți hiperparametri, cum ar fi numărul de neuroni, rata de învățare sau numărul de epoci, pentru a găsi cea mai bună configurație pentru modelul dvs.
- Data augmentation: Creșteți numărul de exemple de antrenament prin generarea de imagini modificate sau rotite pentru a îmbunătăți performanța modelului.
Odată ce ați identificat și aplicat îmbunătățirile potrivite, reantrenați modelul și evaluați din nou performanța pentru a vedea cât de mult s-au îmbunătățit rezultatele.