#python #keras #conv-neural-network
#python #keras #conv-нейронная сеть
Вопрос:
Модель Nvidia показывает ошибку для шагов, даже если я инициализирую их значением по умолчанию (1,1) Я использую «шаги» в качестве замены аргумента «подвыборка» в предыдущих версиях keras. может кто-нибудь объяснить новый синтаксис их использования.
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'
Ответ №1:
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'))
Ответ №2:
Я никогда не работал с 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')
where третий параметр 5
, а затем пытаетесь установить strides
снова с помощью параметра ключевого слова. Кажется, в вашем вызове слишком много одного параметра.
Представьте, что маленький Python gnome обрабатывает ваш код: «Хорошо, босс хочет экземпляр Conv2D
. Он устанавливает первый аргумент filters
4
равным, второй аргумент kernel_size
2
равным и третий аргумент strides
2
равным . Сделано с позиционными аргументами. Теперь давайте продолжим с аргументами ключевого слова. Здесь у нас есть strides
и … о, у меня уже есть strides
, так что я не знаю, что делать. Босс может разозлиться, поэтому я расскажу ему, что именно произошло. TypeError: __init__() got multiple values for argument 'strides'
Комментарии:
1. Теперь я чувствую себя идиотом, потому что это сработало, указав размер ядра в скобках, lol. спасибо, брат