Ошибка атрибута: объект «кортеж» не имеет атрибута «ниже» при создании объекта модели

#tuples #attributeerror

Вопрос:

При определении модели happyModel()

Реализует прямое распространение для модели двоичной классификации:
ZEROPAD2D -gt; CONV2D -gt;gt; BATCHNORM -gt;gt;gt; RELU -gt;gt;gt;gt; MAXPOOL -gt;gt;gt;gt;gt; СГЛАЖИВАНИЕ -gt;gt;gt;gt;gt;gt; ПЛОТНЫЙ

Обратите внимание, что для простоты и оценки вы будете жестко кодировать все значения, такие как размеры шага и ядра (фильтра). Обычно функции должны принимать эти значения в качестве параметров функции.

модель — Модель TF Keras (объект, содержащий информацию для всего процесса обучения)

 def happyModel(): model = tf.keras.Sequential(  [  ## ZeroPadding2D with padding 3, input shape of 64 x 64 x 3  tfl.ZeroPadding2D(padding=(3,3), data_format=(64,64,3)),    ## Conv2D with 32 7x7 filters and stride of 1  tfl.Conv2D(32, (7, 7), strides = (1, 1), name = 'conv0'),    ## BatchNormalization for axis 3  tfl.BatchNormalization(axis = 3, name = 'bn0'),    ## ReLU  tfl.Activation('relu'),    ## Max Pooling 2D with default parameters  tfl.MaxPooling2D((2, 2), name='max_pool0'),    ## Flatten layer  tfl.Flatten(),    ## Dense layer with 1 unit for output amp; 'sigmoid' activation  tfl.Dense(1, activation='sigmoid', name='fc'),    # YOUR CODE STARTS HERE    # YOUR CODE ENDS HERE  ] )  return model  

Создание объекта определенной модели:

 happy_model = happyModel()  # Print a summary for each layer  for layer in summary(happy_model):  print(layer)   output = [['ZeroPadding2D', (None, 70, 70, 3), 0, ((3, 3), (3, 3))],  ['Conv2D', (None, 64, 64, 32), 4736, 'valid', 'linear', 'GlorotUniform'],  ['BatchNormalization', (None, 64, 64, 32), 128],  ['ReLU', (None, 64, 64, 32), 0],  ['MaxPooling2D', (None, 32, 32, 32), 0, (2, 2), (2, 2), 'valid'],  ['Flatten', (None, 32768), 0],  ['Dense', (None, 1), 32769, 'sigmoid']]   comparator(summary(happy_model), output)  

Ошибка, которую я получаю «Ошибка атрибута: объект «кортеж» не имеет атрибута «ниже»»

 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) lt;ipython-input-50-f33284fd82fegt; in lt;modulegt; ----gt; 1 happy_model = happyModel()  2 # Print a summary for each layer  3 for layer in summary(happy_model):  4 print(layer)  5    lt;ipython-input-49-b5fc98b1ebbagt; in happyModel()  21   22 ## ZeroPadding2D with padding 3, input shape of 64 x 64 x 3  ---gt; 23 tfl.ZeroPadding2D(padding=(3,3), data_format=(64,64,3)),  24   25 ## Conv2D with 32 7x7 filters and stride of 1  /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/layers/convolutional.py in   __init__(self, padding, data_format, **kwargs)  2800 def __init__(self, padding=(1, 1), data_format=None, **kwargs):  2801 super(ZeroPadding2D, self).__init__(**kwargs)  -gt; 2802 self.data_format = conv_utils.normalize_data_format(data_format)  2803 if isinstance(padding, int):  2804 self.padding = ((padding, padding), (padding, padding))   /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/utils/conv_utils.py in   normalize_data_format(value)  190 if value is None:  191 value = backend.image_data_format()  --gt; 192 data_format = value.lower()  193 if data_format not in {'channels_first', 'channels_last'}:  194 raise ValueError('The `data_format` argument must be one of '  AttributeError: 'tuple' object has no attribute 'lower'  

В чем причина этого? Может ли кто-нибудь предложить мне какие-либо решения! ТИА

Ответ №1:

Я думаю, что проблема заключалась в параметре определения функции. Следующий код работает для меня и решает проблему.

 def happyModel():  Implements the forward propagation for the binary classification model: ZEROPAD2D -gt; CONV2D -gt; BATCHNORM -gt; RELU -gt; MAXPOOL -gt; FLATTEN -gt; DENSE  model = tf.keras.Sequential([    ## ZeroPadding2D with padding 3, input shape of 64 x 64 x 3  tfl.ZeroPadding2D(padding=(3,3), input_shape=(64, 64, 3), data_format=None),    ## Conv2D with 32 7x7 filters and stride of 1  tfl.Conv2D(filters=32, kernel_size=7, strides=1,padding='valid'),    ## BatchNormalization for axis 3    tfl.BatchNormalization(axis = 3, name = 'bn0'),   ## ReLU  tfl.ReLU(max_value=None, negative_slope=0, threshold=0),    ## Max Pooling 2D with default parameters  tfl.MaxPool2D(pool_size=(2, 2), strides=None, padding='valid',data_format=None),    ## Flatten layer  tfl.Flatten(data_format=None),    ## Dense layer with 1 unit for output amp; 'sigmoid' activation  tfl.Dense(1, activation='sigmoid', name='fc'),     ])  return model