как конвертировать керас тензор поток в керас мкснет

1

У меня есть рабочий код python в keras wit shadoworflow backend. Я использую трансферное обучение от VGG16. Все хорошо.

Я хотел использовать бэкэнд mxnet, но имел некоторые проблемы:

from keras.preprocessing.image import ImageDataGenerator
from keras import applications
from helper import target_size, batch_size
from math import ceil
import numpy as np

datagen = ImageDataGenerator(rescale=1./255)

загрузка модели vgg16, исключая верхние полностью подключенные слои

model = applications.VGG16(include_top=False, weights='imagenet' , input_shape=(224, 224 , 3))

выше кода (форма (224,224,3)) дает:

ValueError: вход должен иметь 3 канала; получил input_shape=(224, 224, 3)

если я использую: shape (3,224,24)

'Переопределение переменной% s'% self.name AssertionError: переопределение переменной block1_conv1/kernel1

как я могу правильно использовать mxnet вместо backend в рабочем коде?

Спасибо

Примечание: keras.json:

{
"epsilon": 1e-07, 
"floatx": "float32", 
"image_data_format": "channels_first", 
"backend": "mxnet"

}

ИЗМЕНИТЬ 1:

когда я меняю бэкэнд на mxnet от tensorflow, вам нужно перезагрузить vgg16 модель для mxnet?

  • 0
    Keras-MXNet - это другой (разветвленный) проект , и он требует отдельной установки ( pip install keras-mxnet ), чем собственно pip install keras-mxnet ; Вы установили эту вилку?
  • 0
    Да я уже установил keras-mxnet. Я использую тот же код с tenorflow и все в порядке. Но при изменении на mxnet выдает ошибку выше для vgg16
Теги:
tensorflow
keras
mxnet

1 ответ

2
Лучший ответ

Решение:

Установите data_format в 'channels_last'.

Подробности:

Весы VGG16 imagenet находятся в формате 'channels_last'. Вы должны установить конфигурацию keras в 'channels_last', чтобы заставить ее работать с бэкэндом MXNet.

У нас есть проблема Github и работаем над тем, чтобы позволить бэкенду MXNet загружать другие ориентированные на бэкэнд нагрузки в разных data_format. т.е. Скажите, что у вас есть подготовленная модель TF, которая была подготовлена в формате channels_last. Если вы попытаетесь загрузить это в бэкэнде MXNet с параметром data_format, установленным в 'channels_first', тогда автоматического перехода с каналов_last на channels_first не произойдет.

Причина выпуска:

Бэкэнд MXNet переносит входной слой и ядра уровня Conv, когда слой вызывается с использованием формата channel_last для ускорения. И это вызовет проблемы с заранее подготовленными другими весами бэкэнд-модели, которые не транспонируются. Мы работаем над его исправлением и включением функции.

  • 0
    Спасибо, похоже, работает для извлечения функций из vgg16. Есть ли соображения скорости, чтобы использовать канал в последний раз?
  • 0
    это сработало. Мы использовали в основном тензорный поток и пытались перенести mxnet. Скорость обнаружения в 3 раза медленнее тензорного потока. Это может быть связано с последним каналом или не использовать все возможности процессора. Если мы используем c ++, это может быть быстрее, но не уверен, что мы просто. открывая mxnet сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню