Как объединить множество выходов в матрицу с пользовательскими потерями в Керасе - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь обучить модель считывать штрих-коды фиксированной длины.На данный момент моя модель выглядит следующим образом (для 10-значной длины):

    x = ly.Dense(units=4096)(x)
    x = ly.Activation("relu")(x)  
    x = ly.Activation("relu")(x)
    d0 = ly.Dense(units= 10, activation="softmax")(x)
    d1 = ly.Dense(units= 10, activation="softmax")(x)
    d2 = ly.Dense(units= 10, activation="softmax")(x)
    d3 = ly.Dense(units= 10, activation="softmax")(x)
    d4 = ly.Dense(units= 10, activation="softmax")(x)
    d5 = ly.Dense(units= 10, activation="softmax")(x)
    d6 = ly.Dense(units= 10, activation="softmax")(x)
    d7 = ly.Dense(units= 10, activation="softmax")(x)
    d8 = ly.Dense(units= 10, activation="softmax")(x)
    d9 = ly.Dense(units= 10, activation="softmax")(x)

    model = tf.keras.Model(inputs=[inputs], outputs=[d0, d1, d2, d3, d4, d5, d6, d7, d8, d9]) 

И моя модель скомпилирована с потерей 'categoryorical_crossentropy'.Это работает, однако у меня много тренировок, проверок, потерь в тестировании и точности для мониторинга (всего около 30).

Я хотел бы иметь возможность масштабировать эту модель до большего количества цифр (30, 100?).Но было бы нецелесообразно делать это таким образом.

Я попытался реализовать это, собрав все выходные данные в один вектор (размер 100), а также метки и скомпилировав модель с параметром binary_crossentropy.Однако это никогда не сходилось.Интересно как это так ведь должно быть тоже нет?Я проверил, что этикетки были правильно сложены, и да, они были.

Итак, я попытался преобразовать вывод Dense (4096) в матрицу размера (10, 10) со слоем Reshape, снабдив его метками, преобразованными в столбцы (или строки, которые я не помню).), и он не будет работать ни с бинарной, ни с категориальной кроссентропией, поэтому я предполагаю, что я должен реализовать пользовательские потери.

Как лучше всего решить эту проблему?

Большое спасибо.

...