Изменения

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

Долгая краткосрочная память

Нет изменений в размере, 19:06, 3 апреля 2019
Нет описания правки
== Примеры кода ==
=== Keras ===
Пример кода с использованием библиотеки Keras.<ref name=KerasRNN>[https://keras.io/layers/recurrent/ Keras RNN with LSTM layer]</ref>
 
<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</font>))
 
=== TensorFlow ===
Пример кода с библиотекой TensorFlow<ref>[https://www.tensorflow.org/ TensorFlow]</ref>
print("Testing Accuracy:", \
sess.run(accuracy, feed_dict={X: test_data, Y: test_label}))
 
=== Keras ===
Пример кода с использованием библиотеки Keras.<ref name=KerasRNN>[https://keras.io/layers/recurrent/ Keras RNN with LSTM layer]</ref>
 
<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</font>))
==См. также==
38
правок

Навигация