Трехмерная выходная потеря - PullRequest
0 голосов
/ 31 октября 2019

В настоящее время я работаю над реализацией задачи прогнозирования временных рядов, которая будет создавать метки в последовательности (пакет, шаги, функции) -> (пакет, шаги, классы). У меня есть слой TimeDistributed в качестве моего последнего слоя, и у меня есть трехмерный вывод из-за этого, я, кажется, получаю ужасную точность. Мне интересно, если это связано с тем, что трехмерный результат не рассчитывается правильно в потере. Есть ли лучший способ сделать это?

K.clear_session()

def acc(y_true, y_pred):
    y_pred = tf.argmax(y_pred, 2)
    y_true = tf.squeeze(y_true, -1)
    return categorical_accuracy(y_true, y_pred)

def loss(labels, logits):
    return tf.keras.losses.sparse_categorical_crossentropy(labels, logits, from_logits=True)

def build_model():
    char_in = Input(shape=(None, None)) #sequence length, word char length
    char_emb = Embedding(char_emb_weights.shape[1], 32, weights=char_emb_weights, trainable=False)(char_in)
    char_GRU = TimeDistributed(Bidirectional(GRU(32, recurrent_initializer='glorot_uniform'), 'concat'))(char_emb)
    lstm = LSTM(64, return_sequences=True, recurrent_initializer='glorot_uniform')(char_GRU)
    dense = TimeDistributed(Dense(16, activation='relu'))(lstm)
    output = TimeDistributed(Dense(3, activation='softmax'))(dense)
    #output = CRF(target_size, sparse_target=True)(dense)
    m = Model(inputs=[word_in, char_in], outputs=output)
    m.compile(optimizer='sgd', loss=loss, metrics=[acc])
    return m

1 Ответ

0 голосов
/ 31 октября 2019

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

При этом я все еще ищу объяснение, почему это так же, как и я. Мне любопытно узнать о трехмерном результате и о том, как потери рассчитываются с течением времени, если кто-то может дать ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...