Вход и выход RNN Форма
Я пытаюсь создать RNN с помощью tf.keras для генерации текста. Допустим, у меня есть 100 стихотворений Шекспира максимальной длиной 50 слов, и я использую 10 тысяч английских слов в качестве словаря. Таким образом, моя входная форма будет [100, 50, 10k] (путем заполнения всех обучающих выборок так, чтобы в каждой было по 50 последовательностей). Тогда предположим, что один обучающий образец — «Я люблю Шекспира», тогда моя выходная форма будет [1, 2, 10k] путем сдвига на одно слово вправо. Тогда моя окончательная выходная форма будет [100, 49, 10k]. вот скриншот моей модели (размер партии = 1). когда я пытаюсь подогнать свою модель, точность очень высока (около 0,99) даже в первую эпоху. Что я делаю не так?
моя модель такая: X форма = [113, 149, 10 КБ] Y = форма = [113, 148, 10 КБ];
def CreatingModel(X, densor, lstm, n_a):
m, T, n_x = np.shape(X)
X = tfk.layers.Input(shape=(T, n_x))
z1 = lstm(X)
out = densor(z1)
RNN = tfk.Model(inputs=X, outputs=out)
return RNN
X, text, vocab, T, Y = DataPrepare('dat.txt', 'vocab.txt')
m, T, n_x = np.shape(X)
n_a = 30
densor = tfk.layers.Dense(n_x, activation='softmax')
lstm = tfk.layers.LSTM(n_a, return_sequences = True)
RNN = CreatingModel(X, densor, lstm, n_a)
model summary
Model: "model_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) [(None, 149, 1712)] 0
lstm_5 (LSTM) (None, 149, 30) 209160
dense_5 (Dense) (None, 149, 1712) 53072
=================================================================
Total params: 262,232
Trainable params: 262,232
Non-trainable params: 0
_________________________________________________________________
1 ответ
Из-за сложности вашей модели можно получить высокую точность в первой эпохе. Возможно, вы подгоняете свою модель к текущему набору данных. Можно попробовать использовать Sigmoid в качестве функции активации вместо функции активации Softmax.
Глядя на вашу модель, вы увидите, что она не имеет нескольких скрытых слоев, поэтому это не должно вызывать переобучение модели. Проверьте свои данные один раз, возможно, в вашем наборе данных довольно много избыточности.
Вы можете проверить нехватку данных в вашей модели, обучив ее на меньшем количестве данных и отметив производительность вашей модели (что-то вроде того, что мы делаем в случае SGD).