120 практических задач (страница 3)
Сверточные слои (Conv2D) являются основным элементом CNN. Они применяют фильтры к входному изображению, чтобы выделить различные признаки, такие как края, текстуры и другие важные детали. В нашем примере мы добавляем три сверточных слоя:
1. Первый сверточный слой:
```python
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
```
– 32 фильтра: Каждый фильтр будет извлекать определенный признак из изображения.
– Размер фильтра 3x3: Это небольшой размер, который хорошо подходит для выделения мелких деталей.
– Функция активации ReLU: Rectified Linear Unit (ReLU) помогает сети обучаться нелинейным отношениям между признаками.
– input_shape=(32, 32, 3): Указываем форму входных данных (32x32 пикселя, 3 цветовых канала).
2. Второй сверточный слой:
```python
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
```
–64 фильтра: Увеличиваем количество фильтров, чтобы сеть могла извлекать более сложные признаки.
3. Третий сверточный слой:
```python
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
```
– Дополнительный сверточный слой для дальнейшего выделения признаков.
Добавление слоев подвыборки (Pooling)
Слои подвыборки (MaxPooling2D) уменьшают размерность выходных данных от сверточных слоев, что снижает вычислительную сложность и помогает избежать переобучения. Они выбирают максимальное значение из каждого подмассива данных, тем самым сохраняя наиболее значимые признаки.
1. Первый слой подвыборки:
```python
model.add(layers.MaxPooling2D((2, 2)))
```
– Размер пула 2x2: Снижение размерности выходных данных в два раза по каждой оси.
2. Второй слой подвыборки:
```python
model.add(layers.MaxPooling2D((2, 2)))
```
– Дополнительный слой подвыборки для дальнейшего уменьшения размерности данных.
Добавление полносвязных слоев (Fully Connected Layers)
После извлечения признаков из изображений с помощью сверточных и подвыборочных слоев, мы используем полносвязные слои (Dense) для классификации. Эти слои соединяют каждый нейрон предыдущего слоя с каждым нейроном текущего слоя.
1. Приведение данных в одномерный вид:
```python
model.add(layers.Flatten())
```
– Преобразование многомерного выхода сверточных слоев в одномерный вектор.
2. Первый полносвязный слой:
```python
model.add(layers.Dense(64, activation='relu'))
```
– 64 нейрона: Обучение нелинейным комбинациям признаков.
3. Выходной полносвязный слой:
```python
model.add(layers.Dense(10))
```
– 10 нейронов: Каждый нейрон соответствует одному классу из 10 в наборе данных CIFAR-10.
Построенная таким образом сеть состоит из нескольких сверточных слоев для извлечения признаков, слоев подвыборки для уменьшения размерности данных и полносвязных слоев для классификации. Эта архитектура позволяет эффективно решать задачу классификации изображений, выделяя важные признаки и обучаясь на их основе.
5. Построение простой рекуррентной нейронной сети для анализа временных рядов
– Задача: Прогнозирование цен на акции.
Для построения простой рекуррентной нейронной сети (RNN) для анализа временных рядов и прогнозирования цен на акции можно использовать библиотеку TensorFlow и её высокоуровневый интерфейс Keras. В этом примере мы рассмотрим, как использовать LSTM (Long Short-Term Memory) слои, которые являются разновидностью RNN, чтобы построить модель для прогнозирования цен на акции.
Шаги:
1. Импорт библиотек и модулей.
2. Подготовка данных.
3. Построение модели RNN.
4. Компиляция и обучение модели.
5. Оценка и тестирование модели.
Пример кода:
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers, models
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# Шаг 1: Импорт библиотек
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers, models
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# Шаг 2: Подготовка данных
# Загрузка данных. Предположим, что у нас есть CSV файл с историческими ценами на акции.
data = pd.read_csv('stock_prices.csv')
# Выбираем интересующие нас столбцы, например, 'Close'
prices = data['Close'].values.reshape(-1, 1)
# Нормализация данных
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_prices = scaler.fit_transform(prices)
# Создание последовательностей для обучения модели
def create_sequences(data, sequence_length):
sequences = []
targets = []
for i in range(len(data) – sequence_length):
sequences.append(data[i:i + sequence_length])
targets.append(data[i + sequence_length])
return np.array(sequences), np.array(targets)
sequence_length = 60 # 60 дней
X, y = create_sequences(scaled_prices, sequence_length)
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
# Шаг 3: Построение модели RNN
model = models.Sequential()
model.add(layers.LSTM(50, return_sequences=True, input_shape=(sequence_length, 1)))
model.add(layers.LSTM(50, return_sequences=False))
model.add(layers.Dense(25))
model.add(layers.Dense(1))
# Шаг 4: Компиляция и обучение модели
model.compile(optimizer='adam', loss='mean_squared_error')
history = model.fit(X_train, y_train, batch_size=32, epochs=10,
validation_data=(X_test, y_test))
# Шаг 5: Оценка модели
predictions = model.predict(X_test)
predictions = scaler.inverse_transform(predictions)
# Визуализация результатов
plt.figure(figsize=(10, 6))
plt.plot(data.index[:len(data) – len(y_test)], scaler.inverse_transform(scaled_prices[:len(scaled_prices) – len(y_test)]), color='blue', label='Исторические данные')
plt.plot(data.index[len(data) – len(y_test):], scaler.inverse_transform(scaled_prices[len(scaled_prices) – len(y_test):]), color='orange', label='Истинные значения')
plt.plot(data.index[len(data) – len(y_test):], predictions, color='red', label='Прогнозы')
plt.xlabel('Дата')
plt.ylabel('Цена акции')
plt.legend()
plt.show()
```
Пояснение:
1. Импорт библиотек: Импортируются необходимые библиотеки, включая TensorFlow, Keras, pandas и matplotlib.
2. Подготовка данных: Загружаются данные о ценах акций из CSV файла и нормализуются с помощью MinMaxScaler. Создаются последовательности для обучения модели.
3. Построение модели RNN: Модель строится с использованием двух LSTM слоев. Первый слой LSTM возвращает последовательность, которая передается следующему слою. Второй слой LSTM возвращает конечный выход, который подается на полносвязные слои для получения прогноза.
4. Компиляция и обучение модели: Модель компилируется с использованием оптимизатора Adam и функции потерь mean_squared_error. Затем модель обучается на обучающей выборке.
5. Оценка и тестирование модели: Прогнозы модели сравниваются с реальными данными, и результаты визуализируются с помощью графика.
Этот подход может быть расширен и улучшен, например, путем настройки гиперпараметров модели или добавления дополнительных слоев для повышения точности прогнозов.
Построение модели RNN
Использование двух LSTM слоев
Для анализа временных рядов и прогнозирования цен на акции мы будем использовать два слоя LSTM. LSTM (Long Short-Term Memory) слои являются разновидностью рекуррентных нейронных сетей, специально разработанных для запоминания долгосрочных зависимостей в последовательных данных. В отличие от обычных RNN, которые могут страдать от проблем затухающих градиентов, LSTM могут эффективно обучаться на долгосрочных зависимостях.
Первый слой LSTM
Первый слой LSTM принимает последовательность данных на вход и возвращает последовательность, которая будет передана следующему слою. Возвращение последовательности (return_sequences=True) необходимо, чтобы каждый временной шаг предыдущего слоя был передан на вход следующего слоя LSTM. Это позволяет следующему слою LSTM дополнительно обрабатывать временные зависимости.
```python
model.add(layers.LSTM(50, return_sequences=True, input_shape=(sequence_length, 1)))
```
– 50 нейронов: Это количество нейронов в первом слое LSTM. Число нейронов определяет способность сети к обучению сложным паттернам.
–return_sequences=True: Указывает, что слой должен возвращать полную последовательность выходов для каждого временного шага, а не только последний выход.
– input_shape=(sequence_length, 1): Определяет форму входных данных, где `sequence_length` – это длина последовательности (например, 60 дней), а `1` – это количество признаков (в данном случае, только одно значение цены закрытия).
Второй слой LSTM
Второй слой LSTM принимает последовательность от первого слоя и возвращает конечный выход для всей последовательности. Здесь параметр `return_sequences` установлен в `False`, что означает, что слой будет возвращать только последний выходной элемент последовательности.
```python
model.add(layers.LSTM(50, return_sequences=False))
```
– 50 нейронов: Количество нейронов в втором слое LSTM, аналогично первому слою.
– return_sequences=False: Указывает, что слой должен возвращать только последний выход, который будет использоваться для прогнозирования.
Полносвязные слои
После обработки данных слоями LSTM, выходной вектор передается полносвязным слоям для окончательной классификации или регрессии. Полносвязные слои обеспечивают соединение каждого нейрона предыдущего слоя с каждым нейроном текущего слоя, что позволяет сети обучаться сложным нелинейным зависимостям.
```python
model.add(layers.Dense(25))
model.add(layers.Dense(1))
```
– Первый полносвязный слой:
– 25 нейронов: Полносвязный слой с 25 нейронами. Этот слой может использоваться для дополнительного обучения сложным паттернам в данных.
– Выходной слой:
– 1 нейрон: Выходной слой с одним нейроном, который будет выдавать прогнозируемую цену акции.
Эта архитектура сети, состоящая из двух слоев LSTM и двух полносвязных слоев, позволяет модели эффективно обрабатывать временные ряды и делать прогнозы на основе предыдущих данных. Первый слой LSTM возвращает полную последовательность, позволяя следующему слою LSTM дополнительно обучаться на временных зависимостях. Второй слой LSTM возвращает конечный выход, который затем передается через полносвязные слои для получения окончательного прогноза. Такая архитектура позволяет модели обучаться на длинных временных зависимостях и выдавать точные прогнозы цен на акции.
6. Создание LSTM сети для обработки текстовых данных
– Задача: Анализ настроений в текстах.
Для анализа настроений в текстах с использованием LSTM сети можно использовать библиотеку TensorFlow и её высокоуровневый интерфейс Keras. В этом примере мы рассмотрим, как создать и обучить модель LSTM для анализа настроений на основе текстовых данных.
Шаги:
1. Импорт библиотек и модулей.
2. Подготовка данных.
3. Построение модели LSTM.
4. Компиляция и обучение модели.
5. Оценка и тестирование модели.
Пример кода:
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.preprocessing.text import Tokenizer