【Tensorflow2.0】关于制作标签遇到的问题小结

every blog every motto: You can do more than you think.

0. 前言

制作样本标签中遇到问题的小结,有关softmax

1. 正文

1.1 遇到困难的代码

深度学习中所涉及到的数据有三个:
(x_train,y_train) =(样本,样本标签),还有一个y_predict(预测值)
深度学习的主要思想是根据样本标签(y_train,也称y_true)和预测值(y_predict)计算两者的差距,然后不断调整参数,使差距尽可能的小。


下面的代码就是因为样本标签(y_train,代码中的img_array,(208,208,3))不满足要求,要进行调整为((208,208,2))满足要求的 (这里用labels表示,和下面代码变量名一样,方便叙述)
目的:是将样本标签(y_trian)调整到适合和预测值(y_predict)计算的形状和值,即y_train => labels
说明: 不仅要调整形状,还要调整每个通道的值(原本标签中三个通道的值使相同的)

一句话概括:合并图层的逆操作(将一张合并的图层拆分成几个小图层)

# 生成标签,标签的shape是(208,208,class_numbers)=(208,208,2),里面的值全为0
labels = np.zeros((int(HEIGHT / 2), int(WIDHT / 2), CLASS_NUMBERS))
print('label shape: ',labels.shape)
# 下面将(208,208,3) => (208,208,2)
for cn in range(CLASS_NUMBERS): # range(0,2) => 0,1
    # 标签数组中,斑马线的值为1,其他为0 (三个通道值相同!!!),所以下面选第0通道
    # (img_array[:, :, 0]==cn) ,(208,208)里面的值,如果和cn
    labels[:, :, cn] = (img_array[:, :, 0]==cn).astype(int)
labels = np.reshape(labels,(-1,CLASS_NUMBERS)) # (208,208,2)=>(208*208,2)

标签数据,如下图:
下面的数据其实使有值的,只是看不出。为什么呢?
根据分类数的不同,像元值(范围)也不同。比如:分4类。背景为0,像元值也为0,第一类像元值为1,依次类推。只是这里举例说的单通道。
比如,下面某一个像元的为第2类(背景和斑马线)。背景(三个通道的)值为000,斑马线(三个通道的)值为111(R:1;G:1;B:1,每个通道都是1). 所以这是一张肉眼无法分辨的有数值的图像。
在这里插入图片描述

1.2 举例说明

y_train(代码中的img_array) 三个通道 (可以把通道看作是图层) 中的值相同,下面以0通道为例:
这是一张2 * 2的图片,其中1代码斑马线,0代表背景。剩余两个通道中的值和这一样。
在这里插入图片描述
下面是生成的labels 数组(通道数为2),

labels = np.zeros((2,2,2))

在这里插入图片描述
涉及的代码如下:

# 下面将(208,208,3) => (208,208,2)
for cn in range(CLASS_NUMBERS): # range(0,2) => 0,1
    # 标签数组中,斑马线的值为1,其他为0 (三个通道值相同!!!),所以下面选第0通道
    # (img_array[:, :, 0]==cn) ,(208,208)里面的值,如果和cn
    labels[:, :, cn] = (img_array[:, :, 0]==cn).astype(int)

cn取值分别为0,1(因为CLASS_NUMBERS=2,分两类)

img_array = np.ones((2,2,2))
img_array[1,1] = 0
img_array[:,:,0]

打印第0通道:
在这里插入图片描述
当cn=0,时,和0比较,如下:

t = img[:,:,0] == 0

在这里插入图片描述
将True或False转成1或0:

t.astype(int)

在这里插入图片描述
将结果,赋值给labels的第0通道

labels[:, :, 0] = t

当 cn =1 时,

t = img[:,:,0] ==1

在这里插入图片描述
T/F转成称1/0,如下图

t.astype(int)

在这里插入图片描述
将结果赋值给labels的第1通道

labels[:, :, 1] = t

可用的labels为:
在这里插入图片描述

图像上的变化,如下图:
在这里插入图片描述
初始标签(img_array)三个通道上的值是相同的,经过转换后,第0通道(代表背景)上背景位置(右下角)值为1,第1通道(代表斑马线)上斑马线位置(其余三个)的值为1。
至此, 完成。相当于把合并在一张图层上的值,分成两个图层(再经过softmax)。和预测的y_predict现在可以进行交叉熵计算了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值