Практическое задание №2
1. Запустите jupyter notebook, создайте тетрадку в папке с данными, импортируйте модули, аналогичные практическому заданию №1
2. Считайте данные о рецептах с помощью модуля csv:
with codecs.open(os.path.join(data_path, 'edimdoma_dataset.csv'), 'r') as f:
3. Подготовьте данные для тренировки:
a. Объедините инструкции в текст
text = "".join(instructions)[:300000]
b. Отсортируйте и сделайте словарь символов и соответствующих им id
chars = sorted(list(set(text)))
print('total chars:', len(chars))
char2id = dict((c, i) for i, c in enumerate(chars))
4. Для задачи генерации текста создайте нейронную сеть со следующими параметрами:
model = Sequential()
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
5. Разбейте данные на тренировочную и тестовую выборки, для этого реализуйте функцию get_batches(batch_count=128, batch_size=64)
6. Подготовьте функцию выбора символа:
def sample_character(preds, temperature=1.0):
preds = np.asarray(preds).astype('float64')
preds = np.log(preds) / temperature
preds = exp_preds / np.sum(exp_preds)
probas = np.random.multinomial(1, preds, 1)
7. Инициируйте процесс обучения нейронной сети.
a. Реализуйте код для вычисления тренировочного loss:
Создайте пустой массив и итеративно добавляйте полученные значения методом train_on_batch
for batch_x, batch_y in get_batches():
loss = model.train_on_batch(batch_x, batch_y)
b. Задайте параметры для генерации текста:
index = random.randint(0, len(text) - 100)
sentence = text[index: index + seq_size]
c. Выведите получившиеся результаты сгенерированных предложений
for step in range(max_gen_count):
batch = np.zeros((1, seq_size,))
batch[0,i] = char2id[sentence[i]]
id = sample_character(model.predict_on_batch(batch)[0], t)
sentence = sentence[1:] + chars[id]
8. Задачи для самостоятельной работы:
a. Увеличить точность полученной модели. Для этого, воспользуйтесь продвинутыми техниками и нахождением подходящих гиперпараметров: таких как изменение размера последовательности, количества слоев сетей gru / lstm и т.д.
b. Решите задачу с помощью подхода, основанного на словах вместо символов, для получения красиво выглядящих текстов.