? Короче говоря, каковы проблемы, не связанные с 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 сделать такую ​​классификацию текста? Я понятия не имею вообще.

Ответы на вопрос(0)

Ваш ответ на вопрос