Конвертировать RNN из Pytorch в Керас - PullRequest
0 голосов
/ 27 сентября 2019

Мне дали задание сделать это руководство, но я использую Keras.Вот ссылка.https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html

Но я новичок в Keras и в машинном обучении и т.д., поэтому мой вопрос в целом состоит в том, как сделать так, чтобы это работало максимально простым способом.

Что я не могу понять, так это какие данные мне следует вводить в модель?

У меня есть словарь языка: список имен, как преобразовать в правильный набор данных?

В учебном пособии они вручную подают пример в модель и по какой-то причине преобразовывают его в тензориз (line_length x 1 x n_letters).Почему в трех измерениях нельзя использовать двухмерный массив?

Как можно подавать слова с разными длинами в модель? Я думал, что каждый образец должен иметь одинаковый размер.

Как подготовить этонабор данных для Keras?

import glob
import os
import string


def findFiles(path): return glob.glob(path)

all_letters = string.ascii_letters + " .,;'"
n_letters = len(all_letters)

# Build the category_lines dictionary, a list of names per language
category_lines = {}
all_categories = []


# Read a file and split into lines
def readLines(filename):
   lines = open(filename, encoding='utf-8').read().strip().split('\n')
   return [line for line in lines]


for filename in findFiles('data/names/*.txt'):
    category = os.path.splitext(os.path.basename(filename))[0]
    all_categories.append(category)
    lines = readLines(filename)
    category_lines[category] = lines


n_categories = len(all_categories)


def letterToIndex(letter):
    return all_letters.find(letter)


def letterToTensor(letter):
    tensor = np.zeros((1, n_letters))
    tensor[0][letterToIndex(letter)] = 1
return tensor


# Turn a line into a <line_length x 1 x n_letters>,
# or an array of one-hot letter vectors
def lineToTensor(line):
    tensor = np.zeros((len(line), n_letters))
    for li, letter in enumerate(line):
        tensor[li][0][letterToIndex(letter)] = 1
return tensor


from keras.utils.np_utils import to_categorical
from keras.models import Sequential
from keras.layers import SimpleRNN
from keras.layers import Dense
import numpy as np

model = Sequential()
model.add(SimpleRNN(n_letters))
model.add(Dense(n_categories, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics= ['acc'])

history = model.fit(input_train, y_train, epochs=10, batch_size=128, validation_split=0.2)
...