NN Callback Embedings 2025
NN Callback Embedings 2025
Informatics,
Department of Applied Mathematics
and Business Informatics
Koltcov S.
3. Функция активации (Relu, Sigmoid, Tanh) - определяет выход данного узла при наличии входа или
набора входов.
6. Функция потерь - измерение того, насколько хороша ваша модель с точки зрения предсказания
ожидаемого результата.
7. Скорость обучения - контролирует, насколько сильно изменять модель в ответ на оценочную ошибку
при каждом обновлении весов модели.
8. Количество итераций обучения (эпох) - количество раз, которое алгоритм обучения прорабатывает
весь набор данных для обучения.
History
keras.callbacks.callbacks.History(). Callback, записывающий события в объект History.
Можно использовать для построения кривых точности работы сети.
ModelCheckpoint
keras.callbacks.callbacks.ModelCheckpoint(filepath, monitor=’val_loss’, verbose=0,
save_best_only=False, save_weights_only=False, mode=’auto’, period=1)
Сохранение модели после каждой эпохи. Удобно использовать для отбора нужной версии
сетки.
EarlyStopping
keras.callbacks.callbacks.EarlyStopping(monitor=’val_loss’, min_delta=0, patience=0,
verbose=0, mode=’auto’, baseline=None, restore_best_weights=False)
Прекращение обучения, когда параметр ‘monitor’ перестает улучшаться. Удобно
использовать для сохранения лучшей модели сети.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Example of History
# Создание сети
from keras import models
from keras import layers
model = models.Sequential()
# вход в сеть
model.add(layers.Dense(64, activation='relu',
input_shape=(1000,)))
model.add(layers.Dense(64, activation='relu'))
# Выход
model.add(layers.Dense(3, activation='softmax'))
# Компилируем модель
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Example of History
# 2. компиляция сети
# optimizer='rmsprop' - алгоритм обучения сети
# loss='categorical_crossentropy‘ – функция потерь
# metrics=['accuracy'] - тип метрики качества
# loss='categorical_crossentropy' - функция потерь, которая будет минимизироваться
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# 3. Обучение сети
# запускаем процесс обучения сети
# x_train, y_train - датасет на котором обучаем сеть
# epochs=9 - число эпох обучения
# batch_size=512
# validation_data - датасет на котором производится
проверка качества обученной модели
history = model.fit(x_train, y_dummy_train,
epochs=20, batch_size=512,
validation_data=(x_valid, y_dummy_valid))
history_dict = history.history
history_dict.keys()
# 3. обучение сети
# запускаем процесс обучения сети
# x_train, y_train - датасет на котором обучаем сеть
# epochs=9 - число эпох обучения
# batch_size=512
# validation_data - датасет на котором производится проверка качества обученной модели
При запуске обучения сети задаем список функций callbacks. В процессе обучения сети будут
сохранена лучшая модель (веса скомпилированной сети) в заданный каталог.
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Эмбединги это векторное представление каждого слова в виде набора чисел фиксированного
размера. Исходя из этого слой эмбединг работает следующим образом. У нас есть текст в виде
последовательности id-ков слов.
model = Sequential()
# Задаем слой эмбединга
model.add(Embedding(max_words, embedding_dim, input_length=my_max_len))
# Преобразование размерности
model.add(Flatten())
# Добавляем слой
model.add(Dense(32, activation='relu'))
# Выходной слой
model.add(Dense(3, activation='sigmoid'))
model.summary()
# Определяем модель
model = Model(inputs=[deep_inputs], outputs=[main_output])
model.summary()
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Этот прием называется регуляризацией весов, он реализуется добавлением в функцию потерь сети
штрафа за увеличение весов и имеет две разновидности:
L1-регуляризация (L1 regularization) — добавляемый штраф прямо пропорционален абсолютным
значениям весовых коэффициентов (L1-норма весов).
В Keras добавить батч-нормализацию к сети очень просто: за нее отвечает слой BatchNormalization,
которому мы передадим несколько параметров, самый важный из которых — axis (вдоль какой оси
данных будут вычислять статистические характеристики). В частности, во время работы со
сверточными слоями, нам лучше нормализовать вдоль отдельных каналов, следовательно,
выбираем axis=1.
model.compile(optimizer='rmsprop',
model.add(Dense(3, activation='sigmoid')) loss='categorical_crossentropy', metrics=['accuracy'])
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Embeddings в pytorch
self.embeddings = nn.Embedding(vocab_size + 1, embedding_dim)
Если ваш изначальный vocab_size равен 1000, то без добавления +1 у вас будет 1000
индексов (от 0 до 999), которые могут быть использованы для токенов. Это означает, что
у вас нет специального индекса для падинга. При добавлении +1, у вас будет 1001
индекс, что позволит использовать индекс 0 для подброса, а токены будут mapped на
индексы от 1 до 1000.
Ну или можно убрать +1, при этом просто добавить изначально дополнительный токен в
vocab
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Embeddings в pytorch
# Модель с embedding для слов
class SimpleModel(nn.Module):
def __init__(self, vocab_size, embedding_dim):
super(SimpleModel, self).__init__()
# +1 для паддинга
self.embeddings = nn.Embedding(vocab_size, embedding_dim) Слой эмбединга
def forward(self, input):
embedded = self.embeddings(input)
return embedded
# Пример использования
vocab_size = 5 # 4 уникальных токена
embedding_dim = 3 # размер векторов
model = SimpleModel(vocab_size, embedding_dim)
# Получение векторов
output = model(input_indices)
Laboratory for Social and Cognitive Informatics,
Department of Applied Mathematics and Business Informatics
Embeddings в pytorch
В PyTorch есть несколько способов усреднения векторов, полученных после
применения слоя Embedding. Выбор подходящего метода зависит от задачи и
структуры ваших данных. Вот некоторые примеры: