Внедрение мобильной сети Keras - PullRequest
0 голосов
/ 03 июня 2018

Я хочу использовать мобильную сеть с различными значениями для параметра extension_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, в basic_model = MobileNet (альфа = 0,25, глубина_множитель = 0,25, веса = нет)

Файл" C: \ Users \ Pedro "\ Anaconda3 \ lib \ site-packages \ keras \ Applications \ mobilenet.py ", строка 456, в MobileNet x = _depthwise_conv_block (x, 64, alpha, Depth_Multiplier, block_id = 1)

Файл" C: \Пользователи \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ Applications \ mobilenet.py ", строка 654, в _depthwise_conv_block name = 'conv_dw_% d'% block_id) (входные данные)

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

Файл" C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras \ application \ mobilenet.py ", строка 228, в ограничении сборки = self.depthwise_constraint)

Файл" C: \ Users \ Pedro \ Anaconda3\ Lib \ сайт-пакages \ keras \ legacy \ interfaces.py ", строка 87, в оболочке return func (* args, ** kwargs)

Файл" C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ keras "\ engine \ topology.py ", строка 397, в add_weight 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 \ tenorflow_backend.py ", строка 3627, в random_uniform dtype = dtype, seed = seed)

Файл" C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ensorflow \ python \ ops \ random_ops ".py ", строка 240, в произвольной форме, dtype, seed = seed1, seed2 = seed2)

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

Файл" C: \ Users \ Pedro \ Anaconda3 \ lib \ site-packages \ensorflowflow \ python \ framework "\ op_def_library.py ", строка 589, в apply_opparam_name = input_name)

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

TypeError: Значение, переданное параметру shape, имеет тип данных float32, которого нет в списке допустимых значений: int32, int64

Из mobilent paper : «Вторым гиперпараметром, уменьшающим вычислительные затраты нейронной сети, является множитель разрешения ρ.Мы применяем это к входному изображению, и внутреннее представление каждого слоя впоследствии уменьшается на тот же множитель.На практике мы неявно устанавливаем ρ, устанавливая входное разрешение.Теперь мы можем выразить вычислительную стоимость для основных слоев нашей сети в виде отделимых по глубине сверток с множителем ширины α и множителем разрешения ρ: DK · DK · αM · ρDF · ρDF + αM · αN · ρDF · ρDF (7) где ρ ∈(0, 1], который обычно устанавливается неявно, так что входное разрешение сети составляет 224, 192, 160 или 128. ρ = 1 - это базовая линия MobileNet, а ρ <1 - это уменьшенные вычисления MobileNets. Множитель разрешения имеет эффект уменьшениявычислительные затраты на ρ ^ 2. "</p>

И Керас заявил, что коэффициент глубины равен множителю разрешения в здесь и здесь :" Глубина_множитель: множитель глубины для свертки по глубине(также называется множителем разрешения) "

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

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

0 голосов
/ 03 июня 2018

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

Ожидается целое число, например, 25 (число без десятичной точки), а не число с плавающей точкой, например, 0,25

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

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

...