![](/img/trans.png)
[英]AttributeError : 'Nonetype' object has no attribute 'shape'
[英]AttributeError: 'Flatten' object has no attribute 'shape'
我是 TensorFlow 的新手,正在尝试使用tf.keras.layers
ZDB974Z4A2387183CACEF68F5399D8CZ 实现 CNN model 这是我试图实现的代码。
def convolutional_model(input_shape):
input_img = tf.keras.Input(shape=input_shape)
Z1 = tf.keras.layers.Conv2D(filters = 16 , kernel_size= (4,4), strides = (1,1), padding='same')(input_img)
A1 = tf.keras.layers.ReLU()
P1 = tf.keras.layers.MaxPool2D(pool_size=(8,8), strides=(8, 8), padding='same')
Z2 = tf.keras.layers.Conv2D(filters = 16 , kernel_size= (2,2), strides = (1,1), padding='same')(input_img)
A2 = tf.keras.layers.ReLU()
P2 = tf.keras.layers.MaxPool2D(pool_size=(4,4), strides=(4, 4), padding='valid')
F = tf.keras.layers.Flatten()
outputs = tf.keras.layers.Dense(units=6, activation='softmax')(F)
model = tf.keras.Model(inputs=input_img, outputs=outputs)
return model
当我尝试运行它时,我收到以下错误:
AttributeError Traceback (most recent call last)
<ipython-input-66-12f400853748> in convolutional_model(input_shape)
43 P2 = tf.keras.layers.MaxPool2D(pool_size=(4,4), strides=(4, 4), padding='valid')
44 F = tf.keras.layers.Flatten()
---> 45 outputs = tf.keras.layers.Dense(units=6, activation='softmax')(F)
46
47 # YOUR CODE ENDS HERE
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, *args, **kwargs)
980 with ops.name_scope_v2(name_scope):
981 if not self.built:
--> 982 self._maybe_build(inputs)
983
984 with ops.enable_auto_cast_variables(self._compute_dtype_object):
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py in _maybe_build(self, inputs)
2616 if not self.built:
2617 input_spec.assert_input_compatibility(
-> 2618 self.input_spec, inputs, self.name)
2619 input_list = nest.flatten(inputs)
2620 if input_list and self._dtype_policy.compute_dtype is None:
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
164 spec.min_ndim is not None or
165 spec.max_ndim is not None):
--> 166 if x.shape.ndims is None:
167 raise ValueError('Input ' + str(input_index) + ' of layer ' +
168 layer_name + ' is incompatible with the layer: '
AttributeError: 'Flatten' object has no attribute 'shape'
当我用input_img
替换F
时,function 运行没有任何错误,但这不是我想要的 output。 有人可以帮我解决这个问题吗?
Keras 功能 API旨在让您将 model 的前一层作为输入传递到下一层。 对于您定义的大多数层,您并没有真正这样做,而是使它们成为彼此不连接的独立层。 要将一层的结果传递给另一层,您需要通过传入上一层来调用该层。 例如,您的意思可能是这样的。
Z1 = tf.keras.layers.Conv2D(filters = 16 , kernel_size= (4,4), strides = (1,1), padding='same')(input_img)
A1 = tf.keras.layers.ReLU()(Z1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.