我的模型有两种定义方式
1.
model=tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=32,kernel_size= 3, input_shape=(256, 256, 3), activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 5, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(2, activation='softmax')
])
2.
class CNN(tf.keras.Model):
def __init__(self):
super().__init__()
self.conv1=tf.keras.layers.Conv2D(32, 3, activation='relu',input_shape=(256,256,3))
self.pool1=tf.keras.layers.MaxPooling2D()
self.conv2=tf.keras.layers.Conv2D(32, 5, activation='relu')
self.pool2=tf.keras.layers.MaxPooling2D()
self.flatten=tf.keras.layers.Flatten()
self.dense1=tf.keras.layers.Dense(64, activation='relu')
self.dense2=tf.keras.layers.Dense(2, activation='softmax')
def call(self, inputs,training=None,mask=None):
x=self.conv1(inputs)
x=self.pool1(x)
x=self.conv2(x)
x=self.pool2(x)
x=self.flatten(x)
x=self.dense1(x)
output=self.dense2(x)
return output
model=CNN()
其中第一种方法正常运行,第二种方法出现bug
ValueError: The channel dimension of the inputs should be defined. Found `None`.
模型是为了实现猫狗分类,图片为三通道,当我输入图片为mnist的手写数字单通道图片时没有问题
第13行的inputs都没定义他的维度啥的,当然报错
可是定义卷积层的时候有默认值啊,第四行
self.conv1=tf.keras.layers.Conv2D(32, 3, activation='relu',input_shape=(256,256,3))