Продолжайте получать ошибку значения Nan при использовании керас с тензорной доской - PullRequest
0 голосов
/ 21 января 2019

Я использую python3 с conda, и выполняю глубокое обучение с кератами по тензорному потоку и использую тензорную доску для регистрации модели (я использую гистограммы)

Я получаю следующую ошибку:

InvalidArgumentError (см. Выше для отслеживания): Nan в итоге гистограмма для: conv2d_1 / kernel_0 [[узел conv2d_1 / kernel_0 (определено в /home/user/anaconda3/envs/siamese/lib/python2.7/site-packages/keras/callbacks.py:796) = HistogramSummary [T = DT_FLOAT, _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] (conv2d_1 / kernel_0 / tag, conv2d_1 / ядро ​​/ чтения / _139)]]

Я прочитал здесь , что это потому, что регистрация на тензорной доске делает значения nan явными.

Я пытался изменить Адаград на Адама Я пытался снизить скорость обучения Я пытался обрезать значения функции потери Я пытался сделать значение k.epsilon выше (1e-4) Я попытался добавить небольшую ценность в прогнозы Я изменил активацию последнего слоя на сигмовидную

Кажется, ничего не работает ...

Это мой код

    def triplet_wrapper(y_true, y_pred):
        import keras.backend as k
        from tensorflow.math import l2_normalize
        y_pred = k.clip(y_pred, 1e-6, 1e1)
        return k.clip(metric_learning.triplet_semihard_loss(k.squeeze(y_true, 1) + 1e-7, l2_normalize(y_pred, epsilon=1e-7)), 1e-7, 1e1)


        keras.losses.custom_loss = triplet_wrapper
        model5 = Sequential()
        model5.add(Conv2D(32, (3, 3), activation="relu", input_shape=input_shape))
        model5.add(MaxPool2D((2, 2)))
        for i in range(layers - 1):
            model5.add(Conv2D(64, (3, 3), activation="relu"))
            model5.add(MaxPool2D((2, 2)))
        model5.add(Flatten())
        model5.add(Dropout(0.5))
        model5.add(Dense(100, activation="sigmoid"))
        model5.add(Dropout(0.5))
        model5.compile(loss=triplet_wrapper, optimizer=Adam(lr=0.0001))

Я загружаю данные с помощью этого нормализованного загрузчика данных

i = ImageDataGenerator(rescale=1.0 / 255.0)

Этот является набором данных (он большой, я помещаю весь обучающий набор в один каталог - набор данных, а затем запускаю этот скрипт)

...