四、One-hot和损失函数的应用
文章目錄
- 前言
- 一、One-hot是什么?
- 二、應用場景
- 三、One-hot創建方法(3種)
- 1.for 循環生成
- 2.arange遍歷方法
- 3.scatter_方法
- 四、總結
前言
今天閑來無事,因為學習人工智能的道路上遇到了很多問題,糾結從那個問題開始解決?但是不要緊,我已經有答案了。所以,我決定總結一下最近學習知識要點,以緩解緊張的學習氣氛。哈哈哈~~,來吧,進入正題。
/font>
提示:講一下數據預處理之One-Hot。以下是本篇文章正文內容,下面案例可供參考
一、One-hot是什么?
示例:對于這個問題,之前谷歌了一下,還涉及寄存器了(one-hot編碼是N位狀態寄存器為N個狀態進行編碼的方式)。。真的無語。這里不說那些很底層的,我們只需要了解one-hot編碼是將類別變量轉換為機器學習算法中容易處理的一種形式!
概念太抽象了,對太抽了,那么從實際例子來說明。
如下我們有兩個特征:
我們看到有兩個特證名為:animal與food,解釋一下兩列值意思,第一列代表的是動物的名字,第二列是食物的個數,比如第一行cat 2 描述為貓吃了兩個食物,這里是測試數據,主要是想通過,這些數據給予直觀的認識及實際操作。
而對上述數據做one-hot編碼后得結果為:
animal列數據類型是字符串,而第二列是數值型,如果我們能將這些特征值用0/1表示,是不是在機器學習中,對這些非連續值非常有幫助。綜上,我們推論出,如果你在處理的數據中,通過特征工程這一步操作,能夠將特征的類型判別出來,哪些是連續的,哪些是非連續的,那么我們就可以對它進行特殊處理,比如此處的one-hot編碼!
二、應用場景
在模型訓練中,常常會根據損失函數的大小作為訓練效果的好壞。通常會使用:
- 平均絕對誤差(MAEloss),
- 均方誤差(MSEloss),需要做one-hot以及加入softmax輸出函數。
- 二分類交叉熵(BCELoss),需要做one-hot以及加入softmax輸出函數。
- 二分類交叉熵(BCEWithLogitsLoss,對輸入值自動做sigmoid,但需要做one-hot。
- 多分類交叉熵(CrossEntropyLoss),自動對輸入數據做one-hot和softmax。
三、One-hot創建方法(3種)
1.for 循環生成
代碼如下(示例):
def one_hot(w,h,arr):zero_arr = np.zeros([w,h])#w行,h列for i in range(w):j = int(arr[i])zero_arr[i][j]=1return zero_arrarr = np.array([5, 2, 8, 6])one_hot(len(arr),max(arr)+1,arr)
2.arange遍歷方法
該方法前提是:arr = np.array([5, 2, 8, 6])是這樣的類型,即數組類型。
代碼如下(示例):
#法1
arr = np.array([5, 2, 8, 6])
zero_arr = torch.zeros(len(arr),max(arr)+1)
zero_arr[torch.arange(len(arr)),arr]=1 #arange非常類似range函數
#或者一步到位
#法2
torch.zeros(len(arr), max(arr) + 1)[torch.arange(len(arr)),arr]=1
# 一級標題
3.scatter_方法
該方法前提是:arr = torch.tensor([5, 2, 8, 6])是這樣的類型,即張量(tensor)類型。
代碼如下(示例):
arr = torch.tensor([5, 2, 8, 6])torch_out =torch.zeros(len(arr),max(arr)+1).scatter_(1,arr.reshape(-1,1),1)
'''scatter_(input, dim, index, src)可以理解成放置元素或者修改元素
dim:沿著哪個維度進行索引. 一般為1或-1
index:用來 scatter 的元素索引
src:用什么內容來修改交換,可以是一個標量或一個張量'''
'''reshape(-1,1)轉換成1列:
reshape(1,-1)轉化成1行:for
reshape(2,-1)轉換成兩行:
reshape(-1,2)轉化成兩列''';
四、總結
提示:這里對文章進行總結:
1.多分類交叉熵CrossEntropyLoss(),不需要做ong-hot,自動做onehot和softmax。
2.均方差MSELoss,需要做onehot和輸出函數。
3.二分類交叉熵BCELoss(),需要做onehot和輸出函數。
4.二分類交叉熵BCEWithLogitsLoss,onehot,但不用做輸出函數。
總結
以上是生活随笔為你收集整理的四、One-hot和损失函数的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三、如何搞自定义数据集?
- 下一篇: 一、如何实现python导入另一个文件中