我想使用不同的深度乘数(或分辨率乘数)值来使用mobilenet。以下两行代码给我带来了以下错误。您知道这里出了什么问题吗?
from keras.applications.mobilenet import MobileNetbasic_model = MobileNet(alpha=0.25, depth_multiplier=0.25, weights=None)
错误:
Traceback (most recent call last):
File “C:/Users/Pedro/Desktop/Work/Smile/files/CVPR_2016_SMILES_DATA/test.py”, line 2, in basic_model = MobileNet(alpha=0.25, depth_multiplier=0.25, weights=None)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\applications\mobilenet.py”, line 456, in MobileNet x = _depthwise_conv_block(x, 64, alpha, depth_multiplier, block_id=1)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\applications\mobilenet.py”, line 654, in _depthwise_conv_block name=’conv_dw_%d’ % block_id)(inputs)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\engine\topology.py”, line 576, in call self.build(input_shapes[0])
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\applications\mobilenet.py”, line 228, in build constraint=self.depthwise_constraint)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\legacy\interfaces.py”, line 87, in wrapper return func(*args, **kwargs)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\engine\topology.py”, line 397, in add_weight weight = K.variable(initializer(shape),
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\initializers.py”, line 212, in call dtype=dtype, seed=self.seed)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py”, line 3627, in random_uniform dtype=dtype, seed=seed)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\ops\random_ops.py”, line 240, in random_uniform shape, dtype, seed=seed1, seed2=seed2)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_random_ops.py”, line 247, in _random_uniform seed=seed, seed2=seed2, name=name)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py”, line 589, in apply_op param_name=input_name)
File “C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py”, line 60, in _SatisfiesTypeConstraint “, “.join(dtypes.as_dtype(x).name for x in allowed_list)))
TypeError: Value passed to parameter ‘shape’ has DataType float32 not in list of allowed values: int32, int64
根据mobilenet论文:“减少神经网络计算成本的第二个超参数是分辨率乘数ρ。我们将其应用于输入图像,并且每一层的内部表示也相应地减少相同的乘数。在实践中,我们通过设置输入分辨率来隐式设置ρ。现在我们可以将我们网络的核心层的计算成本表示为具有宽度乘数α和分辨率乘数ρ的深度可分离卷积:DK · DK · αM · ρDF · ρDF + αM · αN · ρDF · ρDF (7)其中ρ ∈ (0, 1],通常隐式设置为网络的输入分辨率为224, 192, 160或128。ρ = 1是基准MobileNet,而ρ < 1是减少计算的MobileNets。分辨率乘数的效果是通过ρ^2减少计算成本。”
而Keras声称深度乘数与分辨率乘数相同,参见这里和这里:“depth_multiplier: 深度卷积的深度乘数(也称为分辨率乘数)”
回答:
看起来这只是命名不当,它们并不是相同的。您可以在这里阅读更多