【问题标题】:AttributeError: 'Conv2D' object has no attribute 'shape'AttributeError:“Conv2D”对象没有属性“形状”
【发布时间】:2019-08-12 06:33:42
【问题描述】:

我是 tensorflow 的新手,我想使用 tf.concat,所以我使用了这个布局而不是常规的顺序布局。但我得到的错误是 AttributeError: 'tuple' object has no attribute 'layer' 第二行存在错误

inp = Input(shape=(1050,1050,3))
x1= layers.Conv2D(16 ,(3,3), activation='relu')(inp)
x1= layers.Conv2D(32,(3,3), activation='relu')(x1)
x1= layers.MaxPooling2D(2,2)(x1)
x2= layers.Conv2D(32,(3,3), activation='relu')(x1)
x2= layers.Conv2D(64,(3,3), activation='relu')(x2)
x2= layers.MaxPooling2D(3,3)(x2)
x3= layers.Conv2D(64,(3,3), activation='relu')
x3= layers.Conv2D(64,(2,2), activation='relu')(x3)
x3= layers.Conv2D(64,(3,3), activation='relu')(x3)
x3= layers.Dropout(0.2)(x3)
x3= layers.MaxPooling2D(2,2)(x3)
x4= layers.Conv2D(64,(3,3), activation='relu')
x4= layers.MaxPooling2D(2,2)(x4)
x = layers.Dropout(0.2)(x4)
o = layers.Concatenate(axis=3)([x1, x2, x3, x4, x])
y = layers.Flatten()(o)
y = layers.Dense(1024, activation='relu')(y)
y = layers.Dense(5, activation='softmax')(y) 

model = Model(inp, y)
model.summary()
model.compile(loss='sparse_categorical_crossentropy',optimizer=RMSprop(lr=0.001),metrics=['accuracy'])

导入的文件是

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import numpy as np
import pandas as pd
import shutil
import csv
import tensorflow as tf
import keras_preprocessing
from keras_preprocessing import image
from keras_preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras import layers
from tensorflow.keras import Model
from keras.layers import Input

错误是

AttributeError                            Traceback (most recent call last)
<ipython-input-8-40840424e579> in <module>
      1 inp = Input(shape=(1050,1050,3))
----> 2 x1= layers.Conv2D(16 ,(3,3), activation='relu')(inp)
      3 x1= layers.Conv2D(32,(3,3), activation='relu')(x1)
      4 x1= layers.MaxPooling2D(2,2)(x1)
      5 x2= layers.Conv2D(32,(3,3), activation='relu')(x1)

/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs)
    661               kwargs.pop('training')
    662             inputs, outputs = self._set_connectivity_metadata_(
--> 663                 inputs, outputs, args, kwargs)
    664           self._handle_activity_regularization(inputs, outputs)
    665           self._set_mask_metadata(inputs, outputs, previous_mask)

/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _set_connectivity_metadata_(self, inputs, outputs, args, kwargs)
   1706     kwargs.pop('mask', None)  # `mask` should not be serialized.
   1707     self._add_inbound_node(
-> 1708         input_tensors=inputs, output_tensors=outputs, arguments=kwargs)
   1709     return inputs, outputs
   1710 

/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _add_inbound_node(self, input_tensors, output_tensors, arguments)
   1793     """
   1794     inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
-> 1795                                         input_tensors)
   1796     node_indices = nest.map_structure(lambda t: t._keras_history.node_index,
   1797                                       input_tensors)

/opt/conda/lib/python3.6/site-packages/tensorflow/python/util/nest.py in map_structure(func, *structure, **kwargs)
    513 
    514   return pack_sequence_as(
--> 515       structure[0], [func(*x) for x in entries],
    516       expand_composites=expand_composites)
    517 

/opt/conda/lib/python3.6/site-packages/tensorflow/python/util/nest.py in <listcomp>(.0)
    513 
    514   return pack_sequence_as(
--> 515       structure[0], [func(*x) for x in entries],
    516       expand_composites=expand_composites)
    517 

/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in <lambda>(t)
   1792             `call` method of the layer at the call that created the node.
   1793     """
-> 1794     inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
   1795                                         input_tensors)
   1796     node_indices = nest.map_structure(lambda t: t._keras_history.node_index,

AttributeError: 'tuple' object has no attribute 'layer'

请任何人告诉我该怎么做 代码比以前变化不大请再看一遍

【问题讨论】:

  • 如上述问题的答案中所建议的,您需要将tf.concat() 包裹在Lambda 层内。或者,您可以使用keras.layers.concatenate(...) 进行连接。
  • 另外你需要有实际的输入层,目前输入的是Conv2D。
  • @MatiasValdenegro 错误显示在第二行
  • 是的,所以?问题还是一样,不能将非输入层作为输入到功能 API 中的另一个层。
  • 你能解释一下应该怎么做

标签: python-3.x tensorflow keras


【解决方案1】:

你忘了在第四行给 x2 传递一个输入参数,x3 和 x4 也一样。所以不要写

x2= layers.Conv2D(32,(3,3), activation='relu')

你应该有

x2= layers.Conv2D(32,(3,3), activation='relu')(x1)

【讨论】:

    【解决方案2】:

    您需要实例化一个Input 层来为您的第一层提供输入:

    inp = Input(shape=(1050,1050,3))
    x1= layers.Conv2D(16 ,(3,3), activation='relu')(inp)
    x1= layers.Conv2D(32,(3,3), activation='relu')(x1)
    x1= layers.MaxPooling2D(2,2)(x1)
    x2= layers.Conv2D(32,(3,3), activation='relu')(x1)
    x2= layers.Conv2D(64,(3,3), activation='relu')(x2)
    x2= layers.MaxPooling2D(3,3)(x2)
    x3= layers.Conv2D(64,(3,3), activation='relu')(x2)
    x3= layers.Conv2D(64,(2,2), activation='relu')(x3)
    x3= layers.Conv2D(64,(3,3), activation='relu')(x3)
    x3= layers.Dropout(0.2)(x3)
    x3= layers.MaxPooling2D(2,2)(x3)
    x4= layers.Conv2D(64,(3,3), activation='relu')(x3)
    x4= layers.MaxPooling2D(2,2)(x4)
    x = layers.Dropout(0.2)(x4)
    o = layers.Concatenate(axis=3)([x1, x2, x3, x4, x])
    y = layers.Flatten()(o)
    y = layers.Dense(1024, activation='relu')(y)
    y = layers.Dense(5, activation='softmax')(y) 
    
    model = Model(inp, y)
    model.summary()
    model.compile(loss='sparse_categorical_crossentropy',optimizer=RMSprop(lr=0.001),metrics=['accuracy'])
    

    正如另一个答案中提到的,您也没有将正确的输入传递给Conv2D 层之一。而且你不能直接在 Keras 张量上使用tf 函数,Keras 已经有一个层来执行连接。

    【讨论】:

    • 第2行出现新错误AttributeError: 'tuple' object has no attribute 'layer'
    • @Lawlesx 请添加整个回溯,孤立的错误消息是没有意义的。
    • @Lawlesx 我无法用给定的代码重现错误(我收到其他错误,但不是您在该行中提到的错误)。请提供重现错误的自包含示例,我们可以运行。
    • 我没有得到什么自包含的例子,但我确实添加了所需的导入文件
    猜你喜欢
    • 2021-09-05
    • 2016-05-09
    • 2015-05-07
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2017-05-03
    相关资源
    最近更新 更多