Скорость обучения в мелкой нейронной сети с небольшим набором данных - PullRequest
0 голосов
/ 14 ноября 2018

Мои данные содержат 1 функцию и метку для функции, т.е.["smallBigTest", "toastBob"] <- функция 4 метки <code>["mix", "small", "big", "medium"]

Я преобразовал свои функции в числа на основе алфавита, т.е.

smallBigTest -> 18, 12,  0, 53, 53, 27,  8,  6, 45,  4, 18, 19
toastBob ->     19, 14,  0, 18, 19, 27, 14,  1, -1, -1, -1, -1

, который позже я в горячем виде и изменил, чтобы окончательный массив функций выглядел так: [[hotencoded(18,12,0,53,53,27,8,6,45,4,18,19)], [hotencoded(19,14,0,18,19,27,14,1,-1,-1,-1,-1)]

просто превратил его в двумерный массив из трехмерного массива, чтобы соответствовать моим меткамформа, у меня также есть горячие закодированные метки

данные обучения составляют около 60 тыс. строк текстового файла 1,2 МБ CSV

и вот моя модель:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(16, activation=tf.nn.sigmoid))
model.add(tf.keras.layers.Dense(labelsDictSize, activation=tf.nn.softmax))

optimizer = tf.train.GradientDescentOptimizer(0.05)
model.compile(optimizer, loss=tf.losses.softmax_cross_entropy)
model.fit(featuresOneHot,labelsOneHot, steps_per_epoch=dataCount, epochs=5, verbose=1)

I 'Я новичок в ML, так что я могу делать что-то совершенно неправильное или совершенно глупое, хотя я подумал, что с этим объемом данных все будет в порядке.Обучение на моей машине с gtx870m занимает час в эпоху, а в Google для совместной работы - около 20-30 минут в эпоху

1 Ответ

0 голосов
/ 14 ноября 2018

Для моделей НЛП весьма характерно занимать так много времени на тренировку. Единственное, что я хотел бы изменить в вашей модели, чтобы ускорить процесс обучения, - это заменить оптимизатор на то, что не имеет фиксированной скорости обучения. Это должно ускорить процесс. Я бы предложил использовать adam, так как это один из самых быстрых оптимизаторов с хорошей производительностью.

Просто замените

model.compile(optimizer, loss=tf.losses.softmax_cross_entropy)

с

model.compile(optimizer='adam', loss=tf.losses.softmax_cross_entropy)
...