Изменения

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

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

1946 байт добавлено, 19:08, 4 сентября 2022
м
rollbackEdits.php mass rollback
== Примеры кода ==
=== Keras ===
Пример кода с использованием библиотеки Keras.<ref name=KerasRNN>[https://keras.io/layers/recurrent/ Keras RNN with LSTM layer]</ref>
 
<font color="green"># Импорты</font>
'''import''' numpy '''as''' np
'''import''' keras.backend '''as''' K
'''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
'''def''' f1(y_true, y_pred):
'''def''' recall(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
recall = true_positives / (possible_positives + K.epsilon())
return recall
'''def''' precision(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
precision = precision(y_true, y_pred)
recall = recall(y_true, y_pred)
return 2*((precision*recall)/(precision+recall+K.epsilon()))
<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="red">'f1'</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>))
print(<font color="red">'F1 на тестовых данных: %.2f%%'</font> % (scores[2] * <font color="blue">100</font>))
 
Результат:
Точность на тренировочных данных: 89.64%
F1 на тренировочных данных: 89.55%
Точность на тестовых данных: 83.01%
F1 на тестовых данных: 82.48%
 
=== TensorFlow ===
Пример кода с библиотекой TensorFlow<ref>[https://www.tensorflow.org/ TensorFlow]</ref>
sess.run(accuracy, feed_dict={X: test_data, Y: test_label}))
=== Keras ===Результат: Точность на тренировочных данных: 91.40% F1 на тренировочных данных: 91.05%Пример кода с использованием библиотеки Keras Точность на тестовых данных: 85.<ref name=KerasRNN>[https15% F1 на тестовых данных://keras84.io/layers/recurrent/ Keras RNN with LSTM layer]</ref>28%
<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) языке Java= imdb.load_data(nb_words = max_features) <font color="green"># Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины</font> maxlen = <font color="blue">80</font> <font color="green"># Заполняем короткие рецензии пробелами, а длинные обрезаем<[https:/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> modelgithub.add(Embedding(max_features, <font color="blue">32<com/font>, dropout = <font color="blue">0.2<deeplearning4j/font>)) <font color="green"># Добавляем слой долгоdl4j-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)<examples/font> model.add(LSTM(<font color="blue">100<blob/font>, dropout_W = <font color="blue">0.2<master/font>, dropout_U = <font color="blue">0.2<dl4j-examples/font>)) <font color="green"># Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию<src/font> model.add(Dense(<font color="blue">1<main/font>, activation = <font color="red">'sigmoid'<java/font>)) <font color="green"># Компилируем модель нейронной сети<org/font> model.compile(loss = <font color="red">'binary_crossentropy'<deeplearning4j/font>, optimizer = <font color="red">'adam'<examples/font>, metrics = [<font color="red">'accuracy'<recurrent/font>]) <font color="green"># Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)<character/font> modelLSTMCharModellingExample.fit(X_trainjava Пример] реализации рекуррентной нейронной сети, 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"># Проверяем качество обучения использующей механизм LSTM и натренированной на тестовых данных (если есть данныетекстах Шекспира, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)с применением библиотеки </fontcode> scores = model.evaluate(X_test, y_test, batch_size = <font color="blue">64deeplearning4j</font>) print(<font color="red"code>'Точность на тестовых данных: %.2f%%'</font> % (scores[1] * <font color="blue">100</font>))
==См. также==
1632
правки

Навигация