我将Tensorflow作为后端使用Keras,这是我的代码:
K.clear_session()
model=Sequential()
model.add(layers.Conv2D(32,(3,3),padding='same',input_shape=(49,43,1),activation='relu'))
model.add(layers.Conv2D(64,(3,3),activation='relu'))
model.add(layers.MaxPool2D(pool_size=(8,8)))
model.add(layers.Conv2D(32,(3,3),padding='same',activation='relu'))
model.add(layers.Conv2D(64,(3,3),activation='relu'))
model.add(layers.MaxPool2D(pool_size=(8,8)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(layers.Dense(256,activation='relu'))
model.add(layers.Dense(4,activation='softmax'))
答案 0 :(得分:0)
运行代码时,我得到的输出是不同的-不同的数字:
ValueError:'{{node max_pooling2d_1 / MaxPool}}的3中减去8引起的负尺寸大小= MaxPoolT = DT_FLOAT,data_format =“ NHWC”,ksize = [1,8,8,1],padding =“ VALID”,步幅= [1,8,8,1]',输入形状为[?,3,3,64]。
您的输入太小,无法遍历所有图层。我在下面的代码上添加了每一层的输出。当到达第二个MaxPool层时,它已经太小了,无法除以8。
model=Sequential()
model.add(layers.Conv2D(32,(3,3),padding='same',input_shape=(49,43,1),activation='relu'))
# Output: (49, 43, 32)
model.add(layers.Conv2D(64,(3,3),activation='relu'))
# Output: (47, 41, 64)
model.add(layers.MaxPool2D(pool_size=(8,8)))
# Output: (5, 5, 64))
model.add(layers.Conv2D(32,(3,3),padding='same',activation='relu'))
# Output: (5, 5, 32)
model.add(layers.Conv2D(64,(3,3),activation='relu'))
# Output: (3, 3, 64)
model.add(layers.MaxPool2D(pool_size=(8,8)))
# Output: How can I divide 3 by 8???
model.add(Activation('relu'))
model.add(Flatten())
model.add(layers.Dense(256,activation='relu'))
model.add(layers.Dense(4,activation='softmax'))
关于计算层输出的问题和博客文章很多。
因此,要么增加您的输入,要么删除模型中的某些图层。