Merge pull request 'gusev_vladislav_lab_7 is ready' (#121) from gusev_vladislav_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/121
This commit is contained in:
commit
c0ead13d82
41
gusev_vladislav_lab_7/README.md
Normal file
41
gusev_vladislav_lab_7/README.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
### Вариант 9
|
||||||
|
### Задание на лабораторную работу:
|
||||||
|
Выбрать художественный текст (четные варианты – русскоязычный, нечетные – англоязычный) и
|
||||||
|
обучить на нем рекуррентную нейронную сеть для решения задачи генерации.
|
||||||
|
Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.
|
||||||
|
Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить,
|
||||||
|
как архитектура товарища справляется с вашим текстом.
|
||||||
|
В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами
|
||||||
|
текстов.
|
||||||
|
### Как запустить лабораторную работу:
|
||||||
|
Выполняем файл gusev_vladislav_lab_7.py, решение будет в консоли.
|
||||||
|
|
||||||
|
### Технологии
|
||||||
|
Keras - это библиотека для Python, позволяющая легко и быстро создавать нейронные сети.
|
||||||
|
NumPy - библиотека для работы с многомерными массивами.
|
||||||
|
|
||||||
|
### По коду
|
||||||
|
1) Читаем файл с текстом
|
||||||
|
2) Создаем объект tokenizer для превращение текста в числа для нейронной сети.
|
||||||
|
3) Создаем модель нейронной сети с следующими аргументами:
|
||||||
|
|
||||||
|
- Embedding - это слой, который обычно используется для векторного представления категориальных данных, таких как слова или символы. Он позволяет нейронной сети изучать эмбеддинги, то есть отображение слов (или символов) в вектора низкой размерности. Это позволяет сети понимать семантические отношения между словами.
|
||||||
|
- LSTM - это слой, представляющий собой рекуррентный нейрон, который способен учитывать зависимости в последовательных данных. Он хорошо подходит для обработки последовательных данных, таких как текст.
|
||||||
|
- Dense - это полносвязный слой, который принимает входные данные и применяет весовые коэффициенты к ним. Этот слой часто используется в конце нейронных сетей для решения задачи классификации или регрессии.
|
||||||
|
|
||||||
|
4) Обучаем модель на 100 эпохах (итерациях по данным) и генерируем текст.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
![img.png](img.png)
|
||||||
|
Английский 100 эпох
|
||||||
|
![img_1.png](img_1.png)
|
||||||
|
|
||||||
|
![img_3.png](img_3.png)
|
||||||
|
Русский 100 эпох
|
||||||
|
![img_2.png](img_2.png)
|
||||||
|
Русский 17 эпох
|
||||||
|
![img_4.png](img_4.png)
|
||||||
|
### По консоли
|
||||||
|
- Английский текст генерировался на 100 эпохах, начало получилось осмысленным, но чем ближе к концу тем хуже.
|
||||||
|
- Русский текст также генерировался на 100 эпохах, с многочисленными ошибками в словах. Русский текст,сгенерированный на 17 эпохах по ошибкам в словах оказался лучше, но всё равно не идеально.
|
61
gusev_vladislav_lab_7/gusev_vladislav_lab_7.py
Normal file
61
gusev_vladislav_lab_7/gusev_vladislav_lab_7.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import numpy as np
|
||||||
|
from keras.models import Sequential
|
||||||
|
from keras.layers import Embedding, LSTM, Dense
|
||||||
|
from keras.preprocessing.text import Tokenizer
|
||||||
|
from keras.preprocessing.sequence import pad_sequences
|
||||||
|
|
||||||
|
# Загрузка текста из файла
|
||||||
|
with open('text_ru.txt', 'r', encoding='utf-8') as file:
|
||||||
|
text = file.read()
|
||||||
|
|
||||||
|
# Создание экземпляра Tokenizer
|
||||||
|
tokenizer = Tokenizer(char_level=True)
|
||||||
|
tokenizer.fit_on_texts(text)
|
||||||
|
|
||||||
|
# Преобразование текста в последовательность чисел
|
||||||
|
sequences = tokenizer.texts_to_sequences(text)
|
||||||
|
|
||||||
|
# Подготовка обучающих данных
|
||||||
|
seq_length = 100
|
||||||
|
dataX, dataY = [], []
|
||||||
|
for i in range(0, len(sequences) - seq_length):
|
||||||
|
seq_in = sequences[i:i + seq_length]
|
||||||
|
seq_out = sequences[i + seq_length]
|
||||||
|
dataX.append(seq_in)
|
||||||
|
dataY.append(seq_out)
|
||||||
|
|
||||||
|
dataX = np.array(dataX)
|
||||||
|
dataY = np.array(dataY)
|
||||||
|
|
||||||
|
# Создание модели
|
||||||
|
vocab_size = len(tokenizer.word_index) + 1
|
||||||
|
embedding_dim = 256
|
||||||
|
rnn_units = 1024
|
||||||
|
|
||||||
|
model = Sequential()
|
||||||
|
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=seq_length))
|
||||||
|
model.add(LSTM(units=rnn_units))
|
||||||
|
model.add(Dense(units=vocab_size, activation='softmax'))
|
||||||
|
|
||||||
|
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
|
||||||
|
|
||||||
|
# Обучение модели
|
||||||
|
batch_size = 64
|
||||||
|
model.fit(dataX, dataY, epochs=17, batch_size=batch_size)
|
||||||
|
def generate_text(seed_text, gen_length):
|
||||||
|
generated_text = seed_text
|
||||||
|
|
||||||
|
for _ in range(gen_length):
|
||||||
|
sequence = tokenizer.texts_to_sequences([seed_text])[0]
|
||||||
|
sequence = pad_sequences([sequence], maxlen=seq_length)
|
||||||
|
prediction = model.predict(sequence)[0]
|
||||||
|
predicted_index = np.argmax(prediction)
|
||||||
|
predicted_char = tokenizer.index_word[predicted_index]
|
||||||
|
generated_text += predicted_char
|
||||||
|
seed_text += predicted_char
|
||||||
|
seed_text = seed_text[1:]
|
||||||
|
|
||||||
|
return generated_text
|
||||||
|
# Пример использования
|
||||||
|
generated_text = generate_text("Мультфильмы", 250)
|
||||||
|
print(generated_text)
|
BIN
gusev_vladislav_lab_7/img.png
Normal file
BIN
gusev_vladislav_lab_7/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
gusev_vladislav_lab_7/img_1.png
Normal file
BIN
gusev_vladislav_lab_7/img_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
gusev_vladislav_lab_7/img_2.png
Normal file
BIN
gusev_vladislav_lab_7/img_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
BIN
gusev_vladislav_lab_7/img_3.png
Normal file
BIN
gusev_vladislav_lab_7/img_3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
gusev_vladislav_lab_7/img_4.png
Normal file
BIN
gusev_vladislav_lab_7/img_4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
21
gusev_vladislav_lab_7/text_eng.txt
Normal file
21
gusev_vladislav_lab_7/text_eng.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Do you like watching cartoons? Probably you do! But how did they come to be? Who invented them?
|
||||||
|
|
||||||
|
This is actually a very tough question. The first cartoons were created long before the TV.
|
||||||
|
For example, shadow play was a very popular form of entertainment in ancient China. Such shows looked almost like modern cartoons!
|
||||||
|
|
||||||
|
A toy called a flip book was made in the late 19th century. It was a small soft book with pictures.
|
||||||
|
Each picture was drawn in a slightly different5 way. When you bend this book and release the pages one by one, the images start to move.
|
||||||
|
Strictly speaking, they don’t, but our eyes see it like that anyway. The first real cartoons were made using this trick, too!
|
||||||
|
|
||||||
|
In 1895 brothers Louis and Auguste Lumière created a cinematograph.
|
||||||
|
It was a camera and a film projector in one device. Using this device, many aspiring film directors started to create their own cartoons.
|
||||||
|
|
||||||
|
This developed into a full industry by 1910. Many cartoons of that era are forgotten now, but some are still with us.
|
||||||
|
For example, Felix the Cat was created by Otto Messmer in 1919, and he’s still with us, more than a hundred years later.
|
||||||
|
Currently the rights to the character are held by DreamWorks Animation.
|
||||||
|
|
||||||
|
One of the pioneers in the industry was famous Walt Disney.
|
||||||
|
He was not afraid to experiment to make a cartoon, and his Snow White film was among the firsts to use a multiplane camera.
|
||||||
|
With its help the characters were able to move around the objects, creating an illusion of a 3D world.
|
||||||
|
|
||||||
|
Today most of the cartoons are made with computer animation. The last traditional Disney cartoon to date was Winnie the Pooh (2011).
|
21
gusev_vladislav_lab_7/text_ru.txt
Normal file
21
gusev_vladislav_lab_7/text_ru.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Вам нравится смотреть мультфильмы? Вероятно, так оно и есть! Но как они появились на свет? Кто их изобрел?
|
||||||
|
|
||||||
|
На самом деле это очень сложный вопрос. Первые мультфильмы были созданы задолго до появления телевидения.
|
||||||
|
Например, игра с тенью была очень популярной формой развлечения в Древнем Китае. Такие шоу выглядели почти как современные мультфильмы!
|
||||||
|
|
||||||
|
Игрушка под названием книжка-перевертыш была изготовлена в конце 19 века. Это была маленькая мягкая книжка с картинками.
|
||||||
|
Каждая картинка была нарисована немного по-разному. Когда вы сгибаете эту книгу и отпускаете страницы одну за другой, изображения начинают двигаться.
|
||||||
|
Строго говоря, это не так, но наши глаза все равно видят это именно так. Первые настоящие мультфильмы тоже были сделаны с использованием этого трюка!
|
||||||
|
|
||||||
|
В 1895 году братья Луи и Огюст Люмьер создали кинематограф.
|
||||||
|
Это была камера и кинопроектор в одном устройстве. Используя это устройство, многие начинающие режиссеры начали создавать свои собственные мультфильмы.
|
||||||
|
|
||||||
|
К 1910 году это развилось в полноценную индустрию. Многие мультфильмы той эпохи сейчас забыты, но некоторые все еще с нами.
|
||||||
|
Например, кот Феликс был создан Отто Мессмером в 1919 году, и он все еще с нами, более ста лет спустя.
|
||||||
|
В настоящее время правами на персонажа владеет DreamWorks Animation.
|
||||||
|
|
||||||
|
Одним из пионеров в этой отрасли был знаменитый Уолт Дисней.
|
||||||
|
Он не боялся экспериментировать при создании мультфильма, и его фильм "Белоснежка" был одним из первых, в котором использовалась многоплановая камера.
|
||||||
|
С его помощью персонажи смогли передвигаться по объектам, создавая иллюзию трехмерного мира.
|
||||||
|
|
||||||
|
Сегодня большинство мультфильмов создано с использованием компьютерной анимации. Последним традиционным диснеевским мультфильмом на сегодняшний день был "Винни-Пух" (2011).
|
Loading…
Reference in New Issue
Block a user