【问题标题】:TypeError: __init__() got multiple values for argument 'strides'TypeError:__init__() 为参数“跨步”获取了多个值
【发布时间】:2021-03-03 09:15:44
【问题描述】:

Nvidia 模型显示步幅错误,即使我将它们初始化为 (1,1) 的默认值 我在以前版本的 keras 中使用 'strides' 作为 'subsample' 参数的替代品,有人可以解释使用它们的新语法。

def nvidia_model():
  model = Sequential()
  model.add(Conv2D(24,5,5, strides = (2,2), input_shape= (66,200,3), activation='relu'))
  model.add(Conv2D(36,5,5, strides = (2,2), activation = 'relu'))
  model.add(Conv2D(48,5,5, strides = (2,2), activation = 'relu'))
  model.add(Conv2D(64,3,3, activation = 'relu'))
  model.add(Conv2D(64,3,3, activation = 'relu'))
  model.add(Dropout(0.5))                                               #50% nodes turned to zero

  model.add( Flatten())
  model.add(Dense(100, activation ='relu'))
  model.add(Dropout(0.5))

  model.add(Dense(50, activation ='relu'))
  model.add(Dense(10, activation ='relu'))
  model.add(Dense(1))
  
  optimizer = Adam(lr = 1e-3)
  model.compile(loss = 'mse' , optimizer = optimizer)
  return model

model = nvidia_model()
print(model.summary)

Error:
TypeError                                 Traceback (most recent call last)
<ipython-input-83-aff2a2709b79> in <module>()
----> 1 model = nvidia_model()
      2 print(model.summary)

<ipython-input-82-7942ade664af> in nvidia_model()
      1 def nvidia_model():
      2   model = Sequential()
----> 3   model.add(Conv2D(24,5,5, strides = (2,2), input_shape= (66,200,3), activation='relu'))
      4   model.add(Conv2D(36,5,5, strides = (2,2), activation = 'relu'))
      5   model.add(Conv2D(48,5,5, strides = (2,2), activation = 'relu'))

TypeError: __init__() got multiple values for argument 'strides'

【问题讨论】:

    标签: python keras conv-neural-network


    【解决方案1】:

    我从未与tensorflow 合作过,但根据Conv2D 的文档,它被定义为

    tf.keras.layers.Conv2D(
        filters, kernel_size, strides=(1, 1), padding='valid', data_format=None,
        dilation_rate=(1, 1), groups=1, activation=None, use_bias=True,
        kernel_initializer='glorot_uniform', bias_initializer='zeros',
        kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,
        kernel_constraint=None, bias_constraint=None, **kwargs
    )
    

    如您所见,strides 是第三个参数。

    现在您使用Conv2D(24,5,5, strides = (2,2), input_shape= (66,200,3), activation='relu'),其中第三个参数是5,然后您尝试使用关键字参数再次设置strides。您的调用中似乎有一个参数过多。

    想象一下小 Python gnome 处理你的代码:“好的,老板想要一个 Conv2D 的实例。他将第一个参数 filters 设置为 4,第二个参数 kernel_size 设置为 2 和第三个参数strides2。完成了位置参数。现在让我们继续关键字参数。这里有strides和......哦,我已经有strides,所以我不知道是什么做。老板可能会生气,所以我会告诉他到底发生了什么:TypeError: __init__() got multiple values for argument 'strides'"

    【讨论】:

    • 现在我觉得自己像个白痴,因为把内核大小放在括号里哈哈。谢谢兄弟
    【解决方案2】:
    model.add(Conv2D(24,5,5, strides = (2,2), input_shape= (66,200,3), activation='relu'))
    model.add(Conv2D(36,5,5, strides = (2,2), activation = 'relu'))
    model.add(Conv2D(48,5,5, strides = (2,2), activation = 'relu'))
    

    对于这些行,请使用括号,如下例所示

    model.add(Conv2D(24,(5,5), strides = (2,2), input_shape= (66,200,3), activation='relu'))
    model.add(Conv2D(36,(5,5), strides = (2,2), activation = 'relu'))
    model.add(Conv2D(48,(5,5), strides = (2,2), activation = 'relu'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 2019-01-03
      • 1970-01-01
      • 2020-01-18
      • 2018-10-18
      • 2018-01-16
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多