Tensorfow-lite PReLU Fusion и TransposeConv Bias - PullRequest
0 голосов
/ 08 апреля 2020

Когда мы конвертируем модель 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

enter image description here

Показывает prelu / ReLU в свойстве вывода

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

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

enter image description here

Это не показывает смещение в выходном свойстве

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

1 Ответ

0 голосов
/ 11 апреля 2020

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

...