Keras 初始化程序错误意外关键字参数“dtype”

Fab*_*Dev 1 python keras tensorflow

我正在尝试在 Keras 和 Tensorflow 中编写 Siamese 网络,使用此 Jupiter Notebook 作为参考: https://github.com/hlamba28/One-Shot-Learning-with-Siamese-Networks/blob/master/Siamese%20on% 20Omniglot%20Dataset.ipynb

当我创建模型时:

model = get_siamese_model((105, 105, 1))
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

 Traceback (most recent call last):
  File "main.py", line 164, in <module>
    model = get_siamese_model((105, 105, 1))
  File "main.py", line 129, in get_siamese_model
    kernel_initializer=initialize_weights, kernel_regularizer=l2(2e-4)))
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/training/tracking/base.py", line 456, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 198, in add
    layer(x)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 897, in __call__
    self._maybe_build(inputs)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 2416, in _maybe_build
    self.build(input_shapes)  # pylint:disable=not-callable
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/layers/convolutional.py", line 163, in build
    dtype=self.dtype)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 577, in add_weight
    caching_device=caching_device)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/training/tracking/base.py", line 743, in _add_variable_with_custom_getter
    **kwargs_for_getter)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer_utils.py", line 141, in make_variable
    shape=variable_shape if variable_shape else None)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 259, in __call__
    return cls._variable_v1_call(*args, **kwargs)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 220, in _variable_v1_call
    shape=shape)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 198, in <lambda>
    previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 2598, in default_variable_creator
    shape=shape)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 263, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 1434, in __init__
    distribute_strategy=distribute_strategy)
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 1567, in _init_from_args
    initial_value() if init_from_fn else initial_value,
  File "/home/fabio/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer_utils.py", line 121, in <lambda>
    init_val = lambda: initializer(shape, dtype=dtype)
TypeError: initialize_weights() got an unexpected keyword argument 'dtype'
Run Code Online (Sandbox Code Playgroud)

错误是什么意思?我该如何解决这个问题?

muj*_*iga 9

Keras 内部调用initializer如下提供的

weight = K.variable(initializer(shape, dtype=dtype), dtype=dtype, ......
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,您的自定义的第二个参数不initializer应该是dtypename

使固定

def initialize_weights(shape, dtype=None):
  return np.random.normal(loc = 0.0, scale = 1e-2, size = shape)

def initialize_bias(shape, dtype=None):
  return np.random.normal(loc = 0.5, scale = 1e-2, size = shape)
Run Code Online (Sandbox Code Playgroud)

现在

model = get_siamese_model((105, 105, 1))
model.summary()
Run Code Online (Sandbox Code Playgroud)

将成功构建模型

输出

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_7 (InputLayer)            (None, 105, 105, 1)  0                                            
__________________________________________________________________________________________________
input_8 (InputLayer)            (None, 105, 105, 1)  0                                            
__________________________________________________________________________________________________
sequential_4 (Sequential)       (None, 4096)         38947648    input_7[0][0]                    
                                                                 input_8[0][0]                    
__________________________________________________________________________________________________
lambda_2 (Lambda)               (None, 4096)         0           sequential_4[1][0]               
                                                                 sequential_4[2][0]               
__________________________________________________________________________________________________
dense_4 (Dense)                 (None, 1)            4097        lambda_2[0][0]                   
==================================================================================================
Total params: 38,951,745
Trainable params: 38,951,745
Non-trainable params: 0
_________________________
Run Code Online (Sandbox Code Playgroud)