Посмотрев на следующую суть и проведя некоторые базовые тесты, я пытаюсь создать NER система с использованием LSTM в keras
. Я использую генератор и вызываю fit_generator
.
Вот моя базовая модель keras
:
model = Sequential([
Embedding(input_dim=max_features, output_dim=embedding_size, input_length=maxlen, mask_zero=True),
Bidirectional(LSTM(hidden_size, return_sequences=True)),
TimeDistributed(Dense(out_size)),
Activation('softmax')
])
model.compile(loss='binary_crossentropy', optimizer='adam')
Мой входной размер кажется правильным:
>>> generator = generate()
>>> i,t = next(generator)
>>> print( "Inputs: {}".format(model.input_shape))
>>> print( "Outputs: {}".format(model.output_shape))
>>> print( "Actual input: {}".format(i.shape))
Inputs: (None, 3949)
Outputs: (None, 3949, 1)
Actual input: (45, 3949)
Однако, когда я звоню:
model.fit_generator(generator, steps_per_epoch=STEPS_PER_EPOCH, epochs=EPOCHS)
Кажется, я получаю следующую ошибку:
ValueError:
Error when checking target:
expected activation_1 to have 3 dimensions,
but got array with shape (45, 3949)
Я видел несколько других примеров похожие проблемы, из-за чего я считаю, что мне нужно Flatten()
вводить данные до Activation()
, но если я это сделаю, я получу следующую ошибку.
Layer flatten_1 does not support masking,
but was passed an input_mask:
Tensor("embedding_37/NotEqual:0", shape=(?, 3949), dtype=bool)
Как и в предыдущих вопросах, мой генератор функционально эквивалентен:
def generate():
maxlen=3949
while True:
inputs = np.random.randint(55604, size=maxlen)
targets = np.random.randint(2, size=maxlen)
yield inputs, targets
Я не предполагаю, что мне нужно Flatten
, и я открыт для дополнительных предложений.
generator
? - person Marcin Możejko   schedule 01.11.2017