Чрезвычайно низкая точность и большое время обучения в эпоху для языковой модели на уровне слов - PullRequest
0 голосов
/ 24 июня 2019

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

Я разработал свою первую языковую модель на уровне слов, используя библиотеку Keras, с моим учебным набором в качестве сценария для Pulp Fiction.Я очистил текст от всех знаков препинания и перевел все слова в нижний регистр.Когда я начинаю тренировать свою модель по заданному набору данных, она начинается с точностью 3% и временем тренировки 6-7 минут на эпоху.Это чрезвычайно демотивирует, и мне было интересно, должен ли я настраивать свои гиперпараметры, или это нормальное поведение для моей модели, и оно даст лучшие результаты с большим количеством эпох?

model=Sequential()

model.add(LSTM(256, input_shape=(X.shape[1], X.shape[2]), 
return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(256))
model.add(Dropout(0.5))
model.add(Dense(y.shape[1], activation='softmax'))

model.compile(optimizer='adam',loss='categorical_crossentropy', metrics= 
['accuracy'])
model.fit(X,y,batch_size=128,epochs=100)

1 Ответ

0 голосов
/ 24 июня 2019

Начиная с наблюдения, что 6-7 минут не так уж много за эпоху, вы можете проверить по следующим причинам:

  1. Вы тренируетесь на GPU или CPU? Обычно он должен работать намного быстрее на GPU.

  2. 256 единиц на ячейку для LSTM - это довольно большое измерение. Попробуйте уменьшить до 128 или даже 64, проверьте, не влияет ли производительность.

  3. Каков размер вашего набора данных? Если ваш набор данных большой, то тренировка обычно занимает больше времени.
  4. Если у вас есть ответ на все предыдущие, вы можете попробовать изменить batch_size; однако будьте осторожны, так как очень большой размер пакета не рекомендуется (я бы рекомендовал увеличить его до 256, но не более).
  5. Проверка целостности данных. Если вы знаете, что данные поступают из надежного источника, обратите внимание на то, как вы подаете данные (очистка, предварительная обработка) в свою нейронную сеть. Возможно, способ подачи данных (зависимая переменная (y) и / или X_train) неверен.
...