Я пытаюсь обучить CNN для классификации предложений с использованием TFLearn.
Моя реализация
- Я не использую слой внедрения
- Модель Word2Vecиспользуется для встраивания слов с размером вектора 100
- Каждое предложение дополняется так, что все предложения имеют длину 30
- Есть 10 классовв моих данных
Таким образом, каждое предложение имеет размер 30x100
.
Я хочу использовать TFLearn для разработки CNN для классификации этих предложений, чтобы проверить это, я написалследующий код
net = tflearn.input_data(shape=[None, 30])
net = tflearn.conv_1d(net, 128, 5, padding="valid", activation='relu')
net = tflearn.max_pool_1d(net, 2)
net = tflearn.dropout(net, 0.5)
net = tflearn.fully_connected(net, 10, activation='softmax')
net = tflearn.regression(net, optimizer='adam', learning_rate=0.001, loss='categorical_crossentropy')
Когда я запустил это, я получил следующую ошибку
Incoming Tensor shape must be 3-D
Я решил это, изменив
net = tflearn.input_data(shape=[None, 30])
до
net = tflearn.input_data(shape=[None, 30, 100])
, потому что каждое слово представлено вектором размером 100.
При обучении этому с размером пакета 16 и периодом 1000 потеря составляла около 1,5, а точностьбыл 65% -71%, и он никогда не улучшался с течением времени, несмотря ни на что.
Дополнительная инфormation
- 100 предложения используются для обучения этой модели.
Итак, мой вопрос, не сходится ли модель, потому что форма ввода каким-то образомнеправильно, или это не сходится, потому что мои тренировочные данные недостаточно хороши, или я должен тренировать их дольше?