Merge pull request 'senkin_alexander_lab_7 is ready' (#138) from senkin_alexander_lab_7 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/138
This commit is contained in:
Alexey 2023-11-06 21:52:27 +04:00
commit cab38b4f27
11 changed files with 132 additions and 0 deletions

1
senkin_alexander_lab_7/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
./idea

View File

@ -0,0 +1,40 @@
Лабораторная работа №7
Вариант №4
Задание на лабораторную:
Выбрать художественный текст (четные варианты русскоязычный, нечетные англоязычный) и
обучить на нем рекуррентную нейронную сеть для решения задачи генерации.
Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.
Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить,
как архитектура товарища справляется с вашим текстом.
В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами
текстов.
Как запустить лабораторную работу:
Чтобы увидеть работу программы, нужно запустить исполняемый питон файл senkin_alexander_lab_7.py,
Библиотеки:
- NumPy - библиотека для работы с многомерными массивами.
- Keras - это библиотека для Python, позволяющая легко и быстро создавать нейронные сети.
Описание программы:
- Читаем файл с текстом.
- Каждая строка текста переводится в числа с помощью Tokernizer.
- Строим RNN модель используя Keras: Embedding - представления слов, фраз или текстовых данных в виде числовых векторов в многомерном пространстве. Вложения используются для преобразования текстовой информации в форму, понятную компьютерам, что позволяет моделям машинного обучения анализировать и работать с текстом. LSTM (Long Short-Term Memory) - это тип рекуррентной нейронной сети (RNN), который разработан для обработки и моделирования последовательных данных. LSTM является разновидностью рекуррентных нейронных сетей и был специально создан для решения проблемы исчезающего и взрывающегося градиента, с которыми сталкиваются традиционные RNN. Dense - один из типов слоев, используемых в искусственных нейронных сетях, в том числе в глубоком обучении, применяется для выполнения операции линейной комбинации входных данных и весов, а затем применения нелинейной функции активации к полученному результату.
- Обучаем модель на 100 эпохах.
- Генерируем последовательность на основе текста.
- Я прогнал текст сначала на 20 эпохах русский и английский, получились не очень результаты:
- ![img_2.png](img_2.png)
- ![img_3.png](img_3.png)
- Потом решил прогнать на 50 эпохах, получились вот такие результаты:
- ![img_4.png](img_4.png)
- ![img_5.png](img_5.png)
- Потом решил прогнать на 100 эпохах, получились вот такие результаты:
- ![img.png](img.png)
- ![img_1.png](img_1.png)
- Видно, что сколько бы итераций мы не выбирали, результаты остаются не утешительными.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View 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_rus.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=50, 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("Games", 250)
print(generated_text)

View File

@ -0,0 +1,15 @@
Games - is an amazing world of entertainment that attracts millions of people around the world. They provide an opportunity to immerse oneself in virtual worlds, experience various adventures, and feel new emotions. Games exist in various forms, from board and card games to video games, computer games, and mobile applications. This text will be dedicated to the extensive topic of games and their impact on our lives.
Games are a universal language that unites people of different ages, cultures, and nationalities. They allow us to interact with each other, compete, collaborate, and develop communication skills. Board games and sports games create opportunities for social interaction and strengthening social bonds.
At the same time, video games have become an integral part of modern culture. They allow players to dive into fantastic worlds where they can become heroes and accomplish incredible feats. Video games offer various genres, from adventure games and shooters to role-playing games and simulators, enabling everyone to find a game to their liking.
One of the key aspects of games is the development of skills and abilities. Many games require strategic thinking, problem-solving, the development of coordination, and reaction. Games can also stimulate creative thinking and imagination. They can be useful in education, helping to learn mathematics, science, and other subjects.
A significant part of the gaming world is the competitive aspect. Many games allow players to compete with each other, and this can be exciting and motivating. Video game competitions, such as esports events, have become popular and attract millions of viewers.
Games can also provide positive emotions and enjoyment. They can be a way to relax and distract from everyday worries. Virtual game worlds allow us to experience strong emotions, whether it's the joy of victory, the excitement of competition, or the thrill of adventure.
However, it's important to remember that games can also pose problems if they are abused. Game addiction can have a negative impact on physical and mental health. Therefore, it's important to find a balance between games and other aspects of life.
In conclusion, games are a diverse and exciting world that brings joy, develops skills and abilities, encourages competition, and offers various forms of entertainment. However, responsible and balanced gaming is essential to maintain a healthy and fulfilling life.

View File

@ -0,0 +1,15 @@
Игры - это удивительный мир развлечений, который привлекает миллионы людей по всему миру. Они предоставляют возможность погрузиться в виртуальные миры, испытать разнообразные приключения и испытать новые эмоции. Игры существуют в различных формах, от настольных и карточных игр до видеоигр, компьютерных игр и мобильных приложений. Этот текст будет посвящен обширной теме игр и их влиянию на нашу жизнь.
Игры являются универсальным языком, который объединяет людей разных возрастов, культур и национальностей. Они позволяют нам взаимодействовать друг с другом, соревноваться, сотрудничать и развивать навыки коммуникации. Настольные игры и игры в виде спортивных соревнований создают возможность для общения и укрепления социальных связей.
Вместе с тем, видеоигры стали неотъемлемой частью современной культуры. Они предоставляют игрокам возможность погрузиться в фантастические миры, где они могут стать героями и совершить невероятные подвиги. Видеоигры предоставляют разнообразные жанры, от приключенческих игр и шутеров до ролевых игр и симуляторов. Это позволяет каждому найти игру по своему вкусу.
Одним из ключевых аспектов игр является развитие навыков и способностей. Многие игры требуют стратегического мышления, решения задач, развития координации и реакции. Игры могут также стимулировать творческое мышление и фантазию. Они могут быть полезными в образовании, помогая учить математику, науку и другие предметы.
Важной частью мира игр является соревновательный аспект. Многие игры позволяют игрокам соревноваться между собой, и это может быть захватывающим и мотивирующим. Соревнования по видеоиграм, такие как электронные спортивные мероприятия, стали популярными и привлекают миллионы зрителей.
Игры также могут предоставлять позитивные эмоции и удовольствие. Они могут быть способом расслабиться и отвлечься от повседневных забот. Виртуальные миры игр позволяют нам испытать сильные эмоции, будь то радость от победы, азарт от соревнований или волнение от приключений.
Однако следует помнить, что игры также могут вызывать проблемы, если они злоупотребляются. Зависимость от игр может негативно сказаться на физическом и психическом здоровье. Поэтому важно находить баланс между играми и другими аспектами жизни.
Итак, игры - это разнообразный и захватывающий мир, который приносит радость, развивает навыки и способности, поощряет соревнование и предоставляет различные формы развлечений. Однако ответственное и сбалансированное отношение к играм необходимо для поддержания здоровой и насыщенной жизни.