Изменения

Перейти к: навигация, поиск

Рекуррентные нейронные сети

996 байт добавлено, 16:57, 23 января 2019
Нет описания правки
== Пример кода ==
Пример кода на Python с использованием библиотеки Keras.<ref name=KerasRNN>[https://keras.io/layers/recurrent/ Keras RNN]</ref>
<pre>
# Импорты
import numpy as np
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Activation, Embedding
from keras.layers import LSTM
from keras.datasets import imdb
<font color="green"># Импорты</font> '''import''' numpy '''as''' np '''from''' keras.preprocessing '''import''' sequence '''from''' keras.models '''import''' Sequential '''from''' keras.layers '''import''' Dense, Activation, Embedding '''from''' keras.layers '''import''' LSTM '''from''' keras.datasets '''import''' imdb <font color="green"># Устанавливаем seed для обеспечения повторяемости результатов</font> np.random.seed(<font color="blue">42</font>) <font color="green"># Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)</font> max_features = <font color="blue">5000</font> <font color="green"># Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)</font> (X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features) <font color="green"># Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины</font> maxlen = <font color="blue">80</font> <font color="green"># Заполняем короткие рецензии пробелами, а длинные обрезаем</font> X_train = sequence.pad_sequences(X_train, maxlen = maxlen) X_test = sequence.pad_sequences(X_test, maxlen = maxlen) <font color="green"># Создаем модель последовательной сети</font> model = Sequential() <font color="green"># Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)</font> model.add(Embedding(max_features, <font color="blue">32</font>, dropout = <font color="blue">0.2</font>)) <font color="green"># Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)</font> model.add(LSTM(<font color="blue">100</font>, dropout_W = <font color="blue">0.2</font>, dropout_U = <font color="blue">0.2</font>)) <font color="green"># Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию</font> model.add(Dense(<font color="blue">1</font>, activation = <font color="red">'sigmoid"'</font>)) <font color="green"># Компилируем модель нейронной сети</font> model.compile(loss = <font color="red">'binary_crossentropy'</font>, optimizer = <font color="red">'adam'</font>, metrics = [<font color="red">'accuracy'</font>]) <font color="green"># Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)</font> model.fit(X_train, y_train, batch_size = <font color="blue">64</font>, nb_epoch = <font color="blue">7</font>, validation_data = (X_test, y_test), verbose = <font color="blue">1</font>) <font color="green"># Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)</font> scores = model.evaluate(X_test, y_test, batch_size = <font color="blue">64</font>) print(<font color="red">'Точность на тестовых данных: %.2f%%" '</font> % (scores[1] * <font color="blue">100))</prefont>))
==См. также==
215
правок

Навигация