【问题标题】:EDITED Learning data not correctlyEDITED 学习数据不正确
【发布时间】:2020-01-16 14:56:41
【问题描述】:

我正在学习深度学习。

我正在制作图形分类器:圆形、矩形、三角形、五边形、星形。并且 one-hot 编码成label2idx = dict(rectangle=0, circle=1, pentagon=2, star=3, triangle=4)

但是每个 epoch 的每个学习率都是相同的,并且它不了解图像。

我做了一个层,使用 Relu 函数作为激活函数,Affine 用于每一层,Softmax 用于最后一层,并使用 Adam 优化梯度。

我总共有 234 个 RGB 图像要学习,它是在窗口绘制 2D 工具上创建的,它是 128 * 128 大小,但没有使用整个画布来绘制图形。

图片看起来像:

火车结果。左 [] 是预测,右 [] 是答案标签(我选择随机图像打印预测值和答案标签)。:

epoch:  0.49572649572649574
[ 0.3149641  -0.01454905 -0.23183    -0.2493432   0.11655246] [0 0 0 0 1]
epoch:  0.6837606837606838
[ 1.67341673  0.27887525 -1.09800398 -1.12649948 -0.39533065] [1 0 0 0 0]
epoch:  0.7094017094017094
[ 0.93106499  1.49599772 -0.98549052 -1.20471573 -0.24997779] [0 1 0 0 0]
epoch:  0.7905982905982906
[ 0.48447043 -0.05460748 -0.23526179 -0.22869489  0.05468969] [1 0 0 0 0]

...
epoch:  0.9230769230769231
[14.13835867  0.32432293 -5.01623202 -6.62469261 -3.21594355] [1 0 0 0 0]
epoch:  0.9529914529914529
[ 1.61248239 -0.47768294 -0.41580036 -0.71899219 -0.0901478 ] [1 0 0 0 0]
epoch:  0.9572649572649573
[ 5.93142154 -1.16719891 -1.3656573  -2.19785097 -1.31258801] [1 0 0 0 0]
epoch:  0.9700854700854701
[ 7.42198941 -0.85870225 -2.12027192 -2.81081263 -1.83810873] [1 0 0 0 0]

我认为它学得越多,预测应该像[ 0.00143 0.09357 0.352 0.3 0.253 ] [ 1 0 0 0 0 ],这意味着答案索引应该接近0,但事实并非如此。 甚至火车的准确率有时也会达到 1.0 ( 100% )。

我正在使用以下代码加载和规范化图像。

#data_list = data_list = glob('dataset\\training\\*\\*.jpg')
dataset['train_img'] = _load_img()

def _load_img():
    data = [np.array(Image.open(v)) for v in data_list]
    a = np.array(data)
    a = a.reshape(-1, img_size * 3)

    return a

#normalize
for v in dataset:
   dataset['train_img'] = dataset['train_img'].astype(np.float32)
   dataset['train_img'] /= dataset['train_img'].max()
   dataset['train_img'] -= dataset['train_img'].mean(axis=1).reshape(len(dataset['train_img']), 1)

编辑

我用Image.open(v).convert('LA')让图像灰度化

并检查我的预测值,例如:

[-3.98576886e-04  3.41216374e-05] [1 0]
[ 0.00698861 -0.01111879] [1 0]
[-0.42003415  0.42222863] [0 1]

仍然不了解图像。我删除了 3 个图形来测试它,所以我只有矩形和三角形总共 252 个图像(我画了更多的图像。)

而预测值通常是相反的值( 3.1323, -3.1323 或 3.1323, -3.1303 ),我不知道原因。

不只是提高数值精度,当我使用 SGD 进行优化时,精度并没有提高。一样的准确度。

[ 0.02090227 -0.02085848] [1 0]
epoch:  0.5873015873015873
[ 0.03058879 -0.03086193] [0 1]
epoch:  0.5873015873015873
[ 0.04006064 -0.04004988] [1 0]
[ 0.04545139 -0.04547538] [1 0]
epoch:  0.5873015873015873
[ 0.05605123 -0.05595288] [0 1]
epoch:  0.5873015873015873
[ 0.06495255 -0.06500597] [1 0]
epoch:  0.5873015873015873

【问题讨论】:

    标签: python-3.x deep-learning


    【解决方案1】:

    是的。你的模型表现得很好。该问题与规范化无关(甚至不是问题)。模型实际预测在 0,1 之外,这意味着模型非常有信心。

    模型不会尝试向 [1,0,0,0] 进行优化,因为在计算损失时,它会首先裁剪值。

    希望这会有所帮助!

    【讨论】:

    • 损失约为 70%,当我尝试使用 SGD 优化模型的梯度时,SGD 从未降低到 0。甚至我用新图像测试它以检查准确度实际上约为 95% ,但它没有弄清楚图像的种类。但也许你是对的。标准化不是问题。谢谢。
    • 你是对的,模型工作正常。问题是我要学习的图像更少。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2011-12-10
    • 2020-07-17
    • 2012-09-26
    • 2011-04-11
    • 2017-11-14
    • 2010-10-05
    相关资源
    最近更新 更多