该模型用于二进制分类。 这是我的模型:
im_input= layers.Input(shape=[160,160,3])
x = layers.Conv2D(30,(3,3),strides=(2,2),padding='same')(im_input)
z = layers.DepthwiseConv2D((3,3),strides=2,padding='same',depth_multiplier=10)(im_input)
x = layers.ReLU()(x)
z = layers.ReLU()(z)
x = layers.Conv2D(60,(3,3),strides=(2,2),padding='same')(x)
z = layers.Conv2D(60,(3,3),strides=2,padding='same')(z)
x = layers.ReLU()(x)
z = layers.ReLU()(z)
x = layers.Concatenate()([x,z])
x = layers.Conv2D(120,(3,3),strides=2,padding='same')(x)
x = layers.ReLU()(x)
x = layers.Conv2D(200,(3,3),strides=2,padding='same')(x)
x = layers.ReLU()(x)
x = layers.Conv2D(400,(3,3),strides=1,padding='same')(x)
x = layers.ReLU()(x)
x = layers.Conv2D(900,(3,3),strides=1,padding='same')(x)
x = layers.Flatten()(x)
#x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(100,activation='relu')(x)
x = layers.Dropout(0.2)(x)
x = layers.Dense(20, activation='relu')(x)
out = layers.Dense(1,activation='sigmoid')(x)
smodel = tf.keras.Model(inputs=im_input, outputs=out, name="myModel2")
smodel.summary()
这是损失函数:
cross_entropy = tf.keras.losses.BinaryCrossentropy()
优化器:
optimizer = tf.keras.optimizers.SGD(0.001)
对优化器有何建议?
为什么这种模型损失没有减少?模型有问题吗?有人,请帮助...
答案 0 :(得分:0)
您应该尝试使用Adam优化器来代替SGD。
此外,在您的网络中,增加Dense层中的单位,因为这是数据的最终表示形式。
最后,过滤器的数量应减少,最多保持512个。
如果您的输入尺寸很小,则还可以减少层数。
答案 1 :(得分:0)
尝试将优化器更改为Adam
我认为代码没有任何问题。
另外,请尝试更改密集层-
展平后,使用具有512个单位的密集层,然后直接使用最终输出层。
您不需要太多密集的层。
您也可以发布损失值,如果损失值较大,那么Train标签可能有问题。