Conținut curs
Python Avansat
Despre lecție

Obiective

În această lecție, veți învăța:

  1. Ce este deep learning și ce sunt rețelele neuronale
  2. Introducere în TensorFlow și Keras
  3. Crearea și antrenarea unei rețele neuronale simple folosind Keras
  4. Construirea și antrenarea unei rețele neuronale convoluționale (CNN) pentru recunoașterea imaginilor
  5. 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:

python
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ă:

python
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:

python
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ă:

python
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ă:

python
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:

python
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ă:

python
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:

  1. Analiza curbelor de învățare: Utilizați datele din history pentru a genera grafice ale evoluției acurateții și a funcției de pierdere în timpul antrenării și validării.
  2. Regularizarea: Adăugați tehnici de regularizare, cum ar fi dropout sau regularizarea L1/L2, pentru a preveni overfitting-ul.
  3. 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.
  4. 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.