【633】图片多分类转 one-hot 编码
图片多分类会将不同的数字写在同一副图片上面,例如有3类【0、1、2】,为了输入模型,需要将三个类的结果分别映射到三个通道:
- 0 类:第 0 通道,对于是 0 的像素点设置为 1,其他均为 0
- 1 类:第 1 通道,对于是 1 的像素点设置为 1,其他均为 0
- 2 类:第 2 通道,对于是 2 的像素点设置为 1,其他均为 0
假设我们的图片是 4*4 的,通过下面的操作可以实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | # 设置图片像素值,通过 numpy.array 表示 >>> png = [[ 1 , 2 , 0 , 2 ], [ 2 , 1 , 0 , 1 ], [ 0 , 1 , 2 , 0 ], [ 1 , 0 , 2 , 1 ]] >>> png = np.array(png) >>> png array([[ 1 , 2 , 0 , 2 ], [ 2 , 1 , 0 , 1 ], [ 0 , 1 , 2 , 0 ], [ 1 , 0 , 2 , 1 ]]) # 用来表示不同分类对应的 one-hot 编码 # 0 类:对应于 row0, [1, 0, 0] # 1 类:对应于 row1, [0, 1, 0] # 2 类:对应于 row2, [0, 0, 1] >>> np.eye( 3 ) array([[ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 0. , 0. , 1. ]]) # 通过下面的操作,可以将原始像素值映射为 one-hot # np_arr_1[np_arr_2], 对于 np_arr_2 的每一个值,获取 np_arr_1 对应的 row 来竖着显示 >>> np.eye( 3 )[png.reshape([ - 1 ])] array([[ 0. , 1. , 0. ], [ 0. , 0. , 1. ], [ 1. , 0. , 0. ], [ 0. , 0. , 1. ], [ 0. , 0. , 1. ], [ 0. , 1. , 0. ], [ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 0. , 0. , 1. ], [ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 1. , 0. , 0. ], [ 0. , 0. , 1. ], [ 0. , 1. , 0. ]]) # 在转换回 H * W * Channel 的形式,不过这个看起来不直观 >>> np.eye( 3 )[png.reshape([ - 1 ])].reshape(( 4 , 4 , 3 )) array([[[ 0. , 1. , 0. ], [ 0. , 0. , 1. ], [ 1. , 0. , 0. ], [ 0. , 0. , 1. ]], [[ 0. , 0. , 1. ], [ 0. , 1. , 0. ], [ 1. , 0. , 0. ], [ 0. , 1. , 0. ]], [[ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 0. , 0. , 1. ], [ 1. , 0. , 0. ]], [[ 0. , 1. , 0. ], [ 1. , 0. , 0. ], [ 0. , 0. , 1. ], [ 0. , 1. , 0. ]]]) # 只显示 channel 1,显示如下: >>> np.eye( 3 )[png.reshape([ - 1 ])].reshape(( 4 , 4 , 3 ))[:,:, 0 ] array([[ 0. , 0. , 1. , 0. ], [ 0. , 0. , 1. , 0. ], [ 1. , 0. , 0. , 1. ], [ 0. , 1. , 0. , 0. ]]) # channel 2 >>> np.eye( 3 )[png.reshape([ - 1 ])].reshape(( 4 , 4 , 3 ))[:,:, 1 ] array([[ 1. , 0. , 0. , 0. ], [ 0. , 1. , 0. , 1. ], [ 0. , 1. , 0. , 0. ], [ 1. , 0. , 0. , 1. ]]) # channel 3 >>> np.eye( 3 )[png.reshape([ - 1 ])].reshape(( 4 , 4 , 3 ))[:,:, 2 ] array([[ 0. , 1. , 0. , 1. ], [ 1. , 0. , 0. , 0. ], [ 0. , 0. , 1. , 0. ], [ 0. , 0. , 1. , 0. ]]) # 对应的分类 >>> png array([[ 1 , 2 , 0 , 2 ], [ 2 , 1 , 0 , 1 ], [ 0 , 1 , 2 , 0 ], [ 1 , 0 , 2 , 1 ]]) |
分类:
Python Study
, AI Related
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)