#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