Tensorfow-lite PReLU Fusion и TransposeConv Bias

Когда мы конвертируем модель tf.keras с PReLU с tf 1.15, уровни PReLU становятся ReLU и, кажется, сливаются с предыдущими операторами. В результате файл keras h5 размером 28 МБ становится размером 1,3 МБ. Похоже, что количество параметров значительно меньше, так как я не использовал опцию осей общих весов с PReLU. Итак, это преобразование работает правильно без потери точности? Неужели вообще отбрасываются веса PReLU? Точно так же слияние учитывает смещение транспонированных сверточных слоев (смещение не упоминается как входное свойство в netron). Сохраняют ли эти слияния параметры тренированного веса внутри и влияют ли они на точность вывода tflite?

Prelu Fusion: -

input = Input(shape=(512,512,3), name='ip')
x = Conv2D(filters=8, kernel_size=2, strides=2, padding='valid')(input)
x = PReLU()(x) # shared_axes not used

введите здесь описание изображения

Он показывает prelu / ReLU в свойстве вывода

Транспонировать конв: -

cout1 = Conv2DTranspose(filters=8, kernel_size=2, strides=2, padding = 'same' )(pout1) # Bias is true by default

введите здесь описание изображения

Не отображается смещение в свойстве вывода.

Итак, слияние работает правильно, комбинируя веса, или они отбрасываются?


person anilsathyan7    schedule 08.04.2020    source источник


Ответы (1)


Если все значения в весах равны нулю, они автоматически отбрасываются во время объединения / преобразования. Итак, PReLU стал ReLU после слияния, а транспонирование conv + bias стало транспонированием conv. Проблема возникает, когда вы конвертируете модель в формат tflite перед обучением, поскольку веса имеют свои значения по умолчанию (нули).

person anilsathyan7    schedule 11.04.2020