if ratings[i][j] > 0:

error = ratings[i][j] – np.dot(user_matrix[i,:], item_matrix[:,j])

user_matrix[i,:] += learning_rate * (error * item_matrix[:,j])

item_matrix[:,j] += learning_rate * (error * user_matrix[i,:])

# прогнозирование рейтингов для всех пользователей и предметов

predicted_ratings = np.dot(user_matrix, item_matrix)

# рекомендация предметов для конкретного пользователя

user_id = 0

recommended_items = np.argsort(predicted_ratings[user_id])[::-1]

print("Рекомендации для пользователя", user_id)

print(recommended_items)

В этом примере мы использовали матричную факторизацию для построения рекомендательной системы. Мы инициализировали матрицы пользователей и предметов случайными значениями и обучили их на основе известных рейтингов пользователей и предметов. Затем мы использовали полученные матрицы, чтобы прогнозировать рейтинги для всех пользователей и предметов, а затем рекомендовали предметы на основе этих прогнозов для конкретного пользователя. В реальных системах могут использоваться более сложные алгоритмы и более разнообразные данные.


4. Пример кода «Автоматическое определение эмоций».

Описание процесса.

Импортируем необходимые модули из TensorFlow.

Создаем модель, используя сверточные нейронные сети. Модель принимает входные данные в виде изображения размером 48х48х1 пикселей. Слои Conv2D, BatchNormalization и MaxPooling2D используются для извлечения признаков из изображения. Слой Flatten преобразует полученные признаки в одномерный вектор. Слои Dense, BatchNormalization и Dropout используются для классификации эмоций на 7 категорий (счастье, грусть, злость и т.д.).

Компилируем модель, указываем оптимизатор, функцию потерь и метрики.

Обучаем модель на обучающем наборе данных с использованием валидационного набора.

Оцениваем точность модели на тестовом наборе данных.

Используем модель для предсказания эмоций на новых данных.


import tensorflow as tf

from tensorflow import keras

from tensorflow.keras import layers


# Создание модели

model = keras.Sequential([

layers.Conv2D(32, (3, 3), activation='relu', input_shape=(48, 48, 1)),

layers.BatchNormalization(),

layers.MaxPooling2D(pool_size=(2, 2)),

layers.Dropout(0.25),

layers.Conv2D(64, (3, 3), activation='relu'),

layers.BatchNormalization(),

layers.MaxPooling2D(pool_size=(2, 2)),

layers.Dropout(0.25),

layers.Conv2D(128, (3, 3), activation='relu'),

layers.BatchNormalization(),

layers.MaxPooling2D(pool_size=(2, 2)),

layers.Dropout(0.25),

layers.Flatten(),

layers.Dense(256, activation='relu'),

layers.BatchNormalization(),

layers.Dropout(0.5),

layers.Dense(7, activation='softmax')

])

# Компиляция модели

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

# Обучение модели

history = model.fit(train_data, train_labels, epochs=50, validation_data=(val_data, val_labels))

# Оценка модели

test_loss, test_acc = model.evaluate(test_data, test_labels)

print('Test accuracy:', test_acc)

# Использование модели

predictions = model.predict(new_data)


Этот код создает сверточную нейронную сеть для распознавания эмоций на изображениях размером 48x48 пикселей.

В первом слое используется свертка с 32 фильтрами размера 3x3 и функцией активации ReLU, которая принимает входные изображения размера 48x48x1. Затем следуют слои нормализации пакетов, максимальной пулинги с размером фильтра 2x2 и dropout, который помогает предотвратить переобучение.

Далее добавлены два дополнительных сверточных слоя с увеличенным числом фильтров и аналогичными слоями нормализации и dropout. После этого следует слой сглаживания, который преобразует многомерный вход в одномерный вектор.