Keras mobilenet implimentation

Pedram спросил: 10 мая 2018 в 04:43 в: machine-learning

Я хочу использовать mobilenet с разными значениями для depth_multiplier (или множителя разрешения). Эти две строки кода дают мне следующую ошибку. Любая идея, что здесь происходит неправильно?

from keras.applications.mobilenet import MobileNet
basic_model = MobileNet(alpha=0.25, depth_multiplier=0.25, weights=None)

Ошибка:

Traceback (последний последний вызов):

Файл «C: /Users/Pedro/Desktop/Work/Smile/files/CVPR_2016_SMILES_DATA/test.py», строка 2, inbasic_model = MobileNet (alpha = 0.25, depth_multiplier = 0.25, weight = None)

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ applications \ mobilenet.py», строка 456, в MobileNetx = _depthwise_conv_block (x, 64, alpha, depth_multiplier, block_id = 1)

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ applications \ mobilenet.py», строка 654, в _depthwise_conv_blockname = 'conv_dw_% d'% block_id) (входы)

Файл"C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py", строка 576, в вызов self.build (input_shapes [0])

Файл"C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ applications \ mobilenet.py", строка 228, в build constraint = self.depthwise_constraint)

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ legacy \ interfaces.py», строка 87, в w rapper return func (args,kwargs)

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py», строка 397, в весе add_weight = K.variable (инициализатор (форма),

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ initializers.py», строка 212, в вызов dtype = dtype, seed = self.seed)

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ backend \ tensorflow_backend.py», строка 3627, в random_uniform dtype = dtype, seed = seed)

Файл «C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ ops \ random_ops.py», строка 240, в случайной форме , dtype, seed = seed1, seed2 = seed2)

Файл"C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ ops \ gen_random_ops.py", строка 247, в _random_uniform seed = seed, seed2 = seed2, name = name)

Файл"C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ op_def_library.py", строка 589 , in apply_op param_name = имя_узла)

Файл"C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ tensorflow \ pytho n \ framework \ op_def_library.py", строка 60, в _SatisfiesTypeConstraint",".join (dtypes.as_dtype (x) .name для x в разрешенном_ списке)))

TypeError: значение передано в форму параметра 'имеет DataType float32 notin список допустимых значений: int32, int64

Из мобилизуемой бумаги: «Второй гиперпараметр для уменьшения вычислительной стоимости нейронной сети является мультипликатором разрешения». Мы применяем это к входному изображению, а внутреннее представление каждого слоя впоследствии уменьшается на тот же множитель. На практике мы неявно устанавливаем? путем установки разрешения ввода. Теперь мы можем выразить вычислительную стоимость для основных слоев нашей сети как глубинные разделимые свертки с умножителем ширины? и множитель разрешения?: DK? DK Ã ?? Â ?? Ã ?? Â ·? M Ã ?? Â ?? Ã ?? Â ·? DF Ã ?? Â ?? Ã ?? Â ·? DF +? M Ã ?? Â ?? Ã Â ·? N Ã ?? Â ?? Ã? Â ·? DF Ã ?? Â ?? Ã? Â ·? DF (7) где? ? (0, 1), который обычно устанавливается неявно, так что входное разрешение сети равно 224, 192, 160 или 128. & nbsp; = 1 является базовой сетью MobileNet, а & lt; 1 - уменьшенными вычислениями MobileNets. Множитель разрешени оказывает влияние уменьшая вычислительные затраты на? ^ 2.

И Keras утверждал, что depth_умножитель такой же, как и множитель разрешения здесь и здесь: «depth_умножитель: множитель глубины для глубинной свертки (также называемый множителем разрешения)»

2 ответа

baba ответил: 10 мая 2018 в 05:09

Ответ находится внизу вызова трассировки.

Он ожидает целое число, например, 25 (число без десятичной точки), а не float, например. 0.25

depth_multiplier: количество выходных каналов с глубиной свертки для каждого входного канала. Общее количество выходных каналов с глубиной свертки будет равно filters_in * depth_multiplier.

Ссылка: https://github.com/fchollet/deep-learning-models/blob/master/mobilenet.py

Pedram ответил: 10 мая 2018 в 05:06
Но, как упоминалось в статье, это может быть значение от 0 до 1.
Pedram ответил: 10 мая 2018 в 05:14
Умножая это значение, мы намерены уменьшить количество параметров и, в общем, сделать модель быстрее. Путем умножения большего числа, чем на 1, мы сделаем точно противоположное этому.
baba ответил: 10 мая 2018 в 05:28
Не уверен. Кто-то задал этот вопрос здесь: stats.stackexchange.com/questions/327410/...
Pedram ответил: 12 мая 2018 в 06:23
Я отредактировал вопрос, который я задал; Добавлено больше информации, чтобы положить конец ее из бумаги mobilenet, а также keras.
Есть решение
Pedram ответил: 14 мая 2018 в 04:33

Кажется, это просто плохое имя, и они не то же самое. Вы можете прочитать здесь больше

Дополнительное видео по вопросу: Keras mobilenet implimentation

MobileNet Image Classification with Keras

Build image classifier using transfer learning - Fine-tuning MobileNet with Keras

Convolutional Neural Networks - Deep Learning basics with Python, TensorFlow and Keras p.3