分类神经网络把所有的input只能分成一类的原因/神经网络不能收敛/神经网络loss很大不下降

之前出现过两次这种情况,也就是出现这类情况,对于所有的输入,网络都只能判断成某一类,比如对于所有的输入,输出都是“猫”。还是总结下,当然如果有幸被大佬们看到的话,希望大佬们能给予补充。

做了一点实验,但是不是非常的全面,也没有考虑到每一种情况,而且对于参数的选择也比较随意。所以这个博客的结论是根据作者所采用的网络,一开始设置的超参得出的结论,仅供参考。

一、网络结构

本次实验采用的数据集是cifar-10,使用的网络架构如下,没有写初始化的部分就是没有进行初始化。

网络训练的源代码不太重要,想看私聊。

二、接下来是实验结果

所有的结果和结论都是至少跑了五次,每次1个以上epocn(个别除外)得出的观察结果,也可能会有误差,仅供参考,表一种图片的亮度表示基本上用的是0-255,表二在之前的基础上,默认亮度表示范围是0-1,然后batch_size默认成500,其实是因为作者比较懒,这样训练速度比较快些。

 

三、结论

1、如果是对于图片进行分类的话,需要把图片的像素的表示范围控制在0-1之间而不是0-255,有一定的数字图像处理基础的同学应该明白怎么操作,这点不再展开讲解。个人的理解是这样的,应该是对于softmax层的函数造成的,具体推导过程之后有时间再发,如果一定要用0-255表示的话,可以通过其他方式,但是感觉效果相当不明显。

2、改变初始化的权重,我只改过方差,就比如你初始化参数的时候使用的是一个服从高斯分布的,均值为0,方差为0.1的初始化方式,方差过大可能会导致不收敛的状况发生,这时候我们可以尝试着把方差调小(根据结果来看调小貌似比较管用)

3、学习率过大,这个调小点就很容易出效果,但是也不应该过于小,不然下降速度会太慢。可以每次下降10倍进行尝试。

4、batchsize不益过小,不然可能会出问题的

4、(猜测,但没遇到过),就是图片没有shuffle,也就是没有打乱。这样有可能是这样的,对于最一开始训练数据的标签,全部都是猫,那么网络就可能遇到任何输入都说是猫,这样的话有可能引起这样的状况。如果shuffle打乱不充分应该也有可能引起这种状况。

5、不初始化权重也有可能会引起这种状况,但是亲自尝试后发现在这几次实验中并没有。

6、也可能有多种操作的组合可以让网络收敛,但是目前没有发现或者实验出来,可以多次进行尝试。

7、至于采用哪种措施可以让网络的效果更好,这个就没有尝试了。

 

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
当然可以!以下是一个用卷积神经网络分类图片数据集的 Python 代码示例: 首先,导入必要的库: ```python import numpy as np import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import cifar10 ``` 然后,加载 cifar10 数据集: ```python (x_train, y_train), (x_test, y_test) = cifar10.load_data() ``` 接下来,对数据集进行预处理: ```python # 将像素值缩放到 0-1 范围内 x_train, x_test = x_train / 255.0, x_test / 255.0 # 将标签转换为 one-hot 编码 y_train = tf.keras.utils.to_categorical(y_train, num_classes=10) y_test = tf.keras.utils.to_categorical(y_test, num_classes=10) ``` 然后,定义卷积神经网络模型: ```python model = models.Sequential([ layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(10, activation='softmax') ]) ``` 最后,编译模型并进行训练: ```python model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test)) ``` 这段代码将会训练一个卷积神经网络模型,用于对 cifar10 数据集中的图片进行分类训练过程中,将会输出每个 epoch 的训练准确率和测试准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值