softmax目标:
把线性层的输出都变成>=0,b并且线性层k个分类的输出值加起来等于1
import numpy as np
y = np.array([1, 0 ,0])
z = np.array([0.2, 0.1, -0.1])
y_pred = np.exp(z)/np.exp(z).sum()
loss = -y * np.log(y_pred).sum()
print(loss)
Torch
import torch
y = torch.LongTensor([0])
x = torch.Tensor([[0.2, 0.1, -0.1]])
criterion = torch = torch.nn.CrossEntropyLoss()#包含激活,最后一层不需要激活
loss = -criterion(z, y)
print(loss)
tensor :
二维
>>> import torch
>>> torch.randn(2,3)
tensor([[-1.0413, 0.8792, 2.1381],
[ 0.9541, -2.3019, 0.5490]])
>>>
三维
>>> torch.randn(2,2,3)
tensor([[[ 0.4200, 0.4624, 0.3099],
[-0.1227, 0.2452, 0.9840]],
[[-0.8800, -0.5937, -1.4465],
[ 1.6523, -0.0170, -0.6393]]])
>>>
- 三维基于二维增加了一维,即(2,2,3)是包含了2个2行三列的矩阵;第一个数字即指包含几个二维矩阵
四维
>>> torch.randn(2,2,2,3)
tensor([[[[-1.1649, -1.1810, -0.3619],
[-0.8433, -0.4411, 1.8187]],
[[ 0.4896, 0.4773, 0.0032],
[ 1.1269, 1.3638, 1.4495]]],
[[[-0.1959, 0.5646, 0.7001],
[ 0.6796, 0.1164, 1.6833]],
[[-0.2674, -0.2411, 1.5875],
[-0.2804, 1.4775, 0.2448]]]])
>>>
- 四维基于三维增加了一维,(2,2,2,3)即包含了2个三维的矩阵