===========================
Занятие 29

--Тренажер кода

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

X = np.array([ [0, 0], [0, 1], [1, 0], [1, 1] ])
y = np.array([0, 1, 1, 0])  # задача XOR

# Соберите и скомпилируйте модель
model = Sequential([
    Dense(4, activation='relu', input_shape=(2,)),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy')

# Обучите модель
model.fit(X, y, epochs=100, verbose=0)

# Предсказания (без verbose!)
preds = model.predict(X).flatten()

print(f"Предсказания: {preds}")
	
	
--Викторина

1. Что такое перцептрон в машинном обучении?
Нейрон, который умножает входы на веса и сравнивает с порогом

2. Что такое полносвязная нейронная сеть?
Сеть, где каждый нейрон связан с каждым нейроном следующего слоя

3. Какая команда в Keras используется для добавления полносвязного слоя?
model.add(Dense(...))

4. Что делает функция активации ReLU?
Пропускает положительные значения, отрицательные заменяет на 0

5. Какой метод запускает обучение модели?
fit



===========================
Занятие 30

--Задание для самостоятельной работы 2

1. Какой слой чаще всего используется в базовом перцептроне и полносвязной нейросети?
Dense

2. Какой параметр задаёт количество нейронов в слое Dense?
units

3. Какие функции активации часто применяются в полносвязных слоях?
relu  
sigmoid  
softmax 
tanh

4. Какие этапы входят в стандартный процесс обучения модели в tf.keras?
model.compile() 
model.fit() 
model.evaluate()

5. Какой слой преобразует двумерное изображение в одномерный вектор перед полносвязной частью?
flatten



===========================
Занятие 31

--Тренажер кода

import numpy as np
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Загрузите данные MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Преобразуйте и нормализуйте изображения
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)

# Переведите метки в формат one-hot
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# Соберите и обучите модель
model = Sequential([
    Dense(128, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=1, batch_size=32, verbose=0)

# Выведите точность на тестовой выборке в нужном формате
loss, acc = model.evaluate(x_test, y_test, verbose=0)
print(f"Accuracy на тестовой выборке: {acc}")


--Викторина

1. Что такое MNIST и зачем его используют в машинном обучении?
Набор рукописных цифр для обучения классификации

2. Какой командой можно загрузить датасет MNIST в TensorFlow?
tf.keras.datasets.mnist.load_data()

3. Зачем нормализовать изображения MNIST перед обучением?
Чтобы нейросеть работала с числами от 0 до 1

4. Какая функция активации используется в выходном слое модели для классификации MNIST?
softmax

5. Сколько классов в MNIST?
10



===========================
Занятие 32

--Задание для самостоятельной работы 2

1. Сколько всего классов содержит набор данных MNIST?
10

2. Какой слой чаще всего ставят в конце модели при классификации цифр MNIST?
Dense(10, activation=`softmax`)

3. Какие предобработки применяются к данным MNIST перед обучениеммодели?
Масштабирование значений пикселей 
Преобразование меток в one-hot формат 
Преобразование изображений в одномерные векторы

4. Какие функции можно использовать для оценки обученной модели?
model.evaluate()

5. Какую функцию потерь чаще всего используют для многоклассовой классификации MNIST? 
categorical_crossentropy


--Задание для самоконтроля/самопроверки

1. Что делает функция активации в нейроне?
Добавляет нелинейность в модель

2.  Какие слои относятся к полносвязным в Keras?
Dense
Flatten + Dense

3. Сколько классов содержит датасет MNIST?
10

4. Какие шаги обязательны для подготовки изображений MNIST перед обучением?
Нормализация значений пикселей
Преобразование меток в one-hot векторы

5. Как называется функция активации, которая равна 0 при отрицательном входе и равна входу при положительном? 
relu



===========================
Занятие 33

--Тренажер кода

import tensorflow as tf

# Соберите модель Sequential с нужной архитектурой
model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10)  # logits
])

# Создайте оптимизатор и функцию потерь
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

# Используйте данные inputs и targets
inputs = tf.random.normal([32, 28, 28])  # батч из 32 изображений
targets = tf.random.uniform([32], maxval=10, dtype=tf.int32)  # 32 метки

# Реализуйте прямой и обратный проход с помощью GradientTape
with tf.GradientTape() as tape:
    logits = model(inputs, training=True)
    loss = loss_fn(targets, logits)

grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))

# Выведите нужную строку
print("Обучение на одном батче завершено.")


--Викторина

1. Что такое обратное распространение ошибки в нейросети?
Алгоритм исправления ошибок от выходного слоя к входному

2. Какую роль играют веса в нейронной сети?
Определяют важность входных значений при расчёте результата

3. Что делает стохастический градиентный спуск (SGD)?
Постепенно обновляет веса, используя небольшие партии данных

4. Почему метод называется «градиентный спуск»?
Потому что используется направление уменьшения ошибки, определяемое градиентом

5. Какой тип функции чаще всего используется в конце при обучении классификатора?
Softmax



===========================
Текущий контроль

1. Какой элемент нейронной сети отвечает за принятие входных данных?
Входной слой

2. Как называется функция, которая добавляется в перцептрон для придания нелинейности?
relu

3. Что делает метод .compile() в Keras?
Настраивает оптимизатор и функцию потерь

4. Что такое SGD?
Случайный градиентный спуск

5. Сколько нейронов будет в выходном слое модели для классификации MNIST?
10

6. Что происходит при переобучении модели?
Модель плохо работает на новых данных

7. Для чего используется функция model.fit() в Keras?
Для обучения модели

8. Что делает слой Dense(10, activation='softmax')
Предсказывает вероятности классов

9. Какой слой обычно идёт после Flatten() в Keras-модели для MNIST?
Dense

10. Что означает loss='sparse_categorical_crossentropy'?
Используется для классификации целочисленных меток

11. Что делает функция to_categorical()?
Конвертирует метки в one-hot векторы

12. Что такое "epoch" в обучении нейросети?
Один проход по всему набору данных

13. Как называется минимальная единица искусственного нейрона, принимающая вход и вычисляющая выход?
перцептрон

14. Какой метод оптимизации чаще всего используется вместе с backpropagation?
SGD

15. Как называется функция, которая переводит выходные значения последнего слоя в вероятности?
softmax



===========================
Занятие 35

--Тренажер кода

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

X = np.random.rand(10, 28, 28, 1)  # 10 изображений 28x28x1
y = np.random.randint(0, 2, 10)    # 10 меток (2 класса)

# Соберите модель Sequential с нужной архитектурой
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(64, activation='relu'),
    Dense(1, activation='sigmoid')
])

# Скомпилируйте модель
model.compile(optimizer='adam', loss='binary_crossentropy')

# Обучите модель (epochs=1, verbose=1)
model.fit(X, y, epochs=1, verbose=1)

# Выведите строку "Модель обучена."
print("Модель обучена.")


--Викторина

1. Что такое свёрточная нейронная сеть (CNN) и для чего она используется?
Сеть для распознавания изображений и объектов

2. Что делает свёрточный слой в CNN?
Извлекает признаки, применяя фильтры к изображениям

3. Что такое дополненная реальность (AR)?
Добавление виртуальных объектов на изображение из реального мира

4. Можно ли использовать OpenCV для создания AR-проектов?
Да, OpenCV распознаёт объекты и помогает добавлять графику

5. Как называется тип слоя, который уменьшает размерность после свёртки?
Pooling



===========================
Занятие 36

--Задание для самостоятельной работы 2

1. Какой слой используется в сверточной нейросети для выделения признаков с изображений?
Conv2D

2. Какой метод OpenCV используется для изменения размера изображения?
cv2.resize()

3. Какие слои часто используются после сверточных (Conv2D) в архитектуре CNN?
MaxPooling2D
Dropout
Flatten

4. Какие задачи можно решать с помощью связки OpenCV и сверточных нейросетей?
Распознавание лиц
Классификация изображений
Обнаружение объектов

5. Как называется слой, уменьшающий размерность изображения в CNN?
pooling


--Задание для самоконтроля/самопроверки

1. Что происходит при обратном распространении ошибки (backpropagation)?
Вычисляются градиенты и корректируются веса

2. Какие два компонента включает шаг обучения при использовании SGD?
Вычисление градиента
Обновление весов с учётом скорости обучения

3. Что делает сверточный слой в нейросети?
Извлекает локальные признаки из изображения

4. Какие функции OpenCV чаще всего используются при обработке изображений для CNN?
cv2.resize()
cv2.cvtColor()

5. Как называется алгоритм, при котором веса корректируются на основе одного или нескольких случайных примеров? 
SGD



===========================
Занятие 37

--Тренажер кода

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense

X = np.random.rand(8, 5, 3)    # 8 последовательностей длины 5, по 3 признака
y = np.random.randint(0, 2, 8) # 8 меток (2 класса)

# Соберите модель Sequential с нужной архитектурой
model = Sequential([
    SimpleRNN(16, activation='tanh', input_shape=(5, 3)),
    Dense(1, activation='sigmoid')
])

# Скомпилируйте модель
model.compile(optimizer='adam', loss='binary_crossentropy')

# Обучите модель (epochs=1, verbose=1)
model.fit(X, y, epochs=1, verbose=1)

# Выведите строку "RNN обучена."
print("RNN обучена.")


--Викторина

1. Что такое рекуррентная нейронная сеть (RNN)?
Сеть, способная анализировать последовательности и учитывать предыдущее состояние

2. Чем RNN отличается от полносвязной нейросети?
RNN передаёт данные от шага к шагу, сохраняя контекст

3. Почему RNN хорошо работает с текстами?
Потому что она учитывает контекст и последовательность слов

4. Может ли RNN предсказывать следующее слово или символ в тексте?
Да, это одна из её основных задач

5. Как называется улучшенная разновидность RNN, которая использует «гейты» памяти?
LSTM



===========================
Занятие 38

--Задание для самостоятельной работы 2

1. Для чего чаще всего используют рекуррентные нейронные сети?
Работа с последовательностями (текст, речь)

2. Какой слой реализует базовую рекуррентную ячейку в Keras?
SimpleRNN

3. Какие варианты RNN доступны в tf.keras.layers?
SimpleRNN
LSTM
GRU

4. Какие проблемы могут возникнуть при обучении обычной RNN?
Взрыв градиентов
Затухание градиентов
Сложности с долгосрочной памятью

5. Какая разновидность RNN была создана для решения проблемы долгосрочной зависимости?
lstm



===========================
Занятие 39

--Тренажер кода

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

X = np.random.rand(20, 10)      # 20 объектов, 10 признаков
y = np.random.randint(0, 2, 20) # 20 меток (2 класса)

# Соберите модель Sequential с нужной архитектурой
model = Sequential([
    Dense(32, activation='relu', input_shape=(10,)),
    Dropout(0.5),
    Dense(1, activation='sigmoid')
])

# Скомпилируйте модель
model.compile(optimizer='adam', loss='binary_crossentropy')

# Обучите модель (epochs=1, verbose=1)
model.fit(X, y, epochs=1, verbose=1)

# Выведите строку "Dropout-модель обучена."
print("Dropout-модель обучена.")


--Викторина

1. Что такое переобучение нейросети?
Когда модель запоминает обучающие данные, но плохо работает с новыми

2. Как можно распознать, что модель переобучилась?
Когда точность на обучении высокая, а на тесте — низкая

3. Какой способ помогает уменьшить переобучение?
Использование регуляризации, аугментации и упрощения архитектуры

4. Что означает устойчивость (robustness) нейросети?
Умение правильно реагировать на случайные изменения входа

5. Что помогает избежать переобучения?
Dropout



===========================
Занятие 40

--Задание для самостоятельной работы 2

1. Что означает термин "переобучение" в контексте нейросетей?
Модель слишком хорошо запоминает обучающую выборку

2. Какой слой в Keras часто применяют для предотвращения переобучения?
Dropout

3. Какие приёмы помогают уменьшить переобучение?
Использование слоя Dropout
Увеличение тренировочного набора
Применение регуляризации

4. Какие признаки могут указывать на переобучение модели?
Высокая точность на тренировке и низкая — на тесте 
Потери на валидации растут, а на тренировке — падают 
Сильно колеблющаяся точность на тестовой выборке

5. Как называется метод, добавляющий штраф к весам модели, чтобы избежать переобучения? 
регуляризация


--Задание для самоконтроля/самопроверки

1. Чем отличается RNN от обычной нейросети?
Имеет внутреннюю память состояний

2.  Какие задачи лучше всего решаются с помощью RNN? (выбери два)
Распознавание речи
Генерация текста

3. Что такое переобучение (overfitting)?
Запоминание обучающих данных без обобщения

4. Какие методы помогают бороться с переобучением? (выбери два) 
Dropout 
Увеличение обучающей выборки (data augmentation)

5. Как называется эффект, когда модель хорошо работает на обучающей выборке, но плохо на тестовой? 
overfitting



===========================
Занятие 41

--Тренажер кода

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import to_categorical

X = np.random.rand(12, 6)
y = np.random.randint(0, 3, 12)

# Преобразуйте метки y в формат one-hot
y_cat = to_categorical(y, num_classes=3)

# Соберите модель Sequential с нужной архитектурой
model = Sequential([
    Dense(32, activation='relu', input_shape=(6,)),
    Dense(3, activation='softmax')
])

# Скомпилируйте модель
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Обучите модель (epochs=1, verbose=1)
model.fit(X, y_cat, epochs=1, verbose=1)

# Выведите строку "Модель успешно обучена."
print("Модель успешно обучена.")


--Викторина

1. Можно ли создать нейросеть на Python всего в несколько строк кода?
Да, с помощью библиотек Keras и TensorFlow

2. Что необходимо, чтобы нейросеть начала обучение?
Данные, модель, функция потерь, оптимизатор и вызов fit()

3. Что делает метод model.fit()?
Обучает модель на заданных данных

4. Как можно визуально понять, как учится нейросеть?
Построить графики потерь и точности

5. Как называется набор входных и выходных данных, на которых обучается модель? 
Dataset



===========================
Занятие 42

--Задачи для самостоятельной работы 2

1. Что делает функция model.compile() в Keras?
Настраивает оптимизатор и функцию потерь

2. Сколько раз будет пройдена вся обучающая выборка за одну эпоху?
1

3. Что нужно указать при создании модели Sequential в Keras?
Слои модели 
Размер входных данных (input_shape)

4. Какие шаги обычно входят в процесс создания и запуска простой нейросети?
Импорт библиотек
Построение модели
Сборка модели
Тестирование на новых данных

5. Какой метод модели используется для обучения на данных? 
fit