? Короче говоря, каковы проблемы, не связанные с Keras? Как вы хотите сделать модель?
аюсь использовать 2D CNN для классификации текста на китайском языке и у меня проблемы с настройкой аргументов керасаConvolution2D
, Я знаю основной потокConvolution2D
чтобы справиться с изображением, но застрял, используя мой набор данных с керасом.
My data is 9800 Chinese Article, max sentence length is 6810,with 200 word2vec size.
So the input shape is `(9800, 1, 6810, 200)`
Код для построения моделиMAX_FEATURES = 6810
# I just randomly pick one filter, seems this is the problem?
nb_filter = 128
input_shape = (1, 6810, 200)
# each word is 200 (word2vec size)
embedding_size = 200
# 3 word length
n_gram = 3
# so stride here is embedding_size*n_gram
model = Sequential()
model.add(Convolution2D(nb_filter, n_gram, embedding_size, border_mode='valid', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(100, 1), border_mode='valid'))
model.add(Dropout(0.5))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(hidden_dims))
model.add(Dropout(0.5))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# X is (9800, 1, 6810, 200)
model.fit(X, y, batch_size=32,
nb_epoch=5,
validation_split=0.1)
Вопрос 1, У меня есть проблема, чтобы установитьConvolution2D
аргументы. Мой поиск ниже,
Официальные документы не содержат пример для классификации текста 2D CNN (хотя имеет 1D CNN).
Convolution2D
определение здесьhttps://keras.io/layers/convolutional/:
keras.layers.convolutional.Convolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', activation=None, weights=None, border_mode='valid', subsample=(1, 1), dim_ordering='default', W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)
nb_filter: количество используемых сверточных фильтров.
nb_row: количество строк в ядре свертки. nb_col: количество столбцов в ядре свертки. border_mode: 'valid', 'same' или 'full'. («Полный» требует бэкэнда Theano.)
Некоторые исследования об аргументах:
Эта проблемаhttps://github.com/fchollet/keras/issues/233 о 2D CNN для классификации текста, я читаю все комментарии и выбираю:
(1)https://github.com/fchollet/keras/issues/233#issuecomment-117427013
model.add(Convolution2D(nb_filter=N_FILTERS, stack_size=1, nb_row=FIELD_SIZE,
nb_col=1, subsample=(STRIDE, 1)))
(2)https://github.com/fchollet/keras/issues/233#issuecomment-117700913
sequential.add(Convolution2D(nb_feature_maps, 1, n_gram, embedding_size))
Но, похоже, что у текущей версии keras есть некоторые отличия, также аргументы, названные разными людьми, находятся в замешательстве (я надеюсь, что keras имеет легко понятное расширение аргументов).
Еще один комментарий, который я вижу о текущем API:
https://github.com/fchollet/keras/issues/1665#issuecomment-181181000
Текущий API, как показано ниже:
keras.layers.convolutional.Convolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', activation='linear', weights=None, border_mode='valid', subsample=(1, 1), dim_ordering='th', W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None)
Таким образом, (36,1,7,7) кажется причиной, правильные аргументы были бы (36,7,7, ...).
Приведенным выше исследованием, на моем понимании свертки,Convolution2D
создайте фильтр (nb_filter, nb_row, nb_col), сдвинув шаг, чтобы получить один результат фильтра, рекурсивно скользя, наконец объедините результат в массив с формой (1, one_sample_article_length [6810] / nb_filter) и перейдите к следующему слою, это правильно? Мой код ниже установленnb_row
а такжеnb_col
правильный ?
вопрос 2, Каковы правильные аргументы MaxPooling2D? (для моего набора дат или для обычного, все в порядке)
Я передаю эту проблемуhttps://github.com/fchollet/keras/issues/233#issuecomment-117427013 чтобы установить аргумент, есть два вида:
MaxPooling2D(poolsize=(((nb_features - FIELD_SIZE) / STRIDE) + 1, 1))
MaxPooling2D(poolsize=(maxlen - n_gram + 1, 1))
Я понятия не имею, почему они рассчитываютMaxPooling2D
такой аргумент
Вопрос 3, Любая рекомендация дляbatch_size
а такжеnb_epoch
сделать такую классификацию текста? Я понятия не имею вообще.