深度卷积训练损失没有减少

时间:2020-06-20 14:57:12

标签: python tensorflow deep-learning neural-network conv-neural-network

该模型用于二进制分类。 这是我的模型:

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)

对优化器有何建议?

为什么这种模型损失没有减少?模型有问题吗?有人,请帮助...

2 个答案:

答案 0 :(得分:0)

您应该尝试使用Adam优化器来代替SGD。

此外,在您的网络中,增加Dense层中的单位,因为这是数据的最终表示形式。

最后,过滤器的数量应减少,最多保持512个。

如果您的输入尺寸很小,则还可以减少层数。

答案 1 :(得分:0)

尝试将优化器更改为Adam
我认为代码没有任何问题。
另外,请尝试更改密集层- 展平后,使用具有512个单位的密集层,然后直接使用最终输出层。
您不需要太多密集的层。
您也可以发布损失值,如果损失值较大,那么Train标签可能有问题。

相关问题