Мне дали задание сделать это руководство, но я использую 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)