@@ -263,6 +263,7 @@ | |||
"## 参考资料\n", | |||
"\n", | |||
"* [一文详解Softmax函数](https://zhuanlan.zhihu.com/p/105722023)\n", | |||
"* [损失函数:交叉熵详解](https://zhuanlan.zhihu.com/p/115277553)\n", | |||
"* [交叉熵代价函数(作用及公式推导)](https://blog.csdn.net/u014313009/article/details/51043064)\n", | |||
"* [手打例子一步一步带你看懂softmax函数以及相关求导过程](https://www.jianshu.com/p/ffa51250ba2e)\n", | |||
"* [简单易懂的softmax交叉熵损失函数求导](https://www.jianshu.com/p/c02a1fbffad6)" | |||
@@ -42,7 +42,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 2, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"import torch\n", | |||
@@ -52,7 +54,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 3, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 创建一个 numpy ndarray\n", | |||
@@ -69,7 +73,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 9, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"pytorch_tensor1 = torch.tensor(numpy_tensor)\n", | |||
@@ -100,7 +106,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 5, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 如果 pytorch tensor 在 cpu 上\n", | |||
@@ -129,7 +137,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 7, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 第一种方式是定义 cuda 数据类型\n", | |||
@@ -160,7 +170,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 8, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"cpu_tensor = gpu_tensor.cpu()" | |||
@@ -716,7 +728,7 @@ | |||
"name": "python", | |||
"nbconvert_exporter": "python", | |||
"pygments_lexer": "ipython3", | |||
"version": "3.7.9" | |||
"version": "3.5.4" | |||
} | |||
}, | |||
"nbformat": 4, | |||
@@ -119,7 +119,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 4, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"z = torch.mean(torch.matmul(w, x) + b) # torch.matmul 是做矩阵乘法\n", | |||
@@ -275,7 +277,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 8, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"n.backward(torch.ones_like(n)) # 将 (w0, w1) 取成 (1, 1)" | |||
@@ -349,7 +353,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 18, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"y.backward(retain_graph=True) # 设置 retain_graph 为 True 来保留计算图" | |||
@@ -375,7 +381,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 20, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"y.backward() # 再做一次自动求导,这次不保留计算图" | |||
@@ -455,7 +463,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 10, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"x = torch.tensor([2, 3], dtype=torch.float, requires_grad=True)\n", | |||
@@ -553,7 +563,7 @@ | |||
], | |||
"metadata": { | |||
"kernelspec": { | |||
"display_name": "Python 3 (ipykernel)", | |||
"display_name": "Python 3", | |||
"language": "python", | |||
"name": "python3" | |||
}, | |||
@@ -567,7 +577,7 @@ | |||
"name": "python", | |||
"nbconvert_exporter": "python", | |||
"pygments_lexer": "ipython3", | |||
"version": "3.9.7" | |||
"version": "3.5.4" | |||
} | |||
}, | |||
"nbformat": 4, | |||
@@ -151,7 +151,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 3, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 转换成 Tensor\n", | |||
@@ -166,7 +168,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 4, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 构建线性回归模型\n", | |||
@@ -180,7 +184,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 5, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"y_ = linear_model(x_train)" | |||
@@ -275,7 +281,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 8, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 自动求导\n", | |||
@@ -305,7 +313,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 10, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 更新一次参数\n", | |||
@@ -542,7 +552,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 17, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 构建数据 x 和 y\n", | |||
@@ -582,7 +594,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 19, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 定义参数\n", | |||
@@ -670,7 +684,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 22, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 自动求导\n", | |||
@@ -702,7 +718,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 24, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"# 更新一下参数\n", | |||
@@ -853,7 +871,7 @@ | |||
], | |||
"metadata": { | |||
"kernelspec": { | |||
"display_name": "Python 3 (ipykernel)", | |||
"display_name": "Python 3", | |||
"language": "python", | |||
"name": "python3" | |||
}, | |||
@@ -867,7 +885,7 @@ | |||
"name": "python", | |||
"nbconvert_exporter": "python", | |||
"pygments_lexer": "ipython3", | |||
"version": "3.9.7" | |||
"version": "3.5.4" | |||
} | |||
}, | |||
"nbformat": 4, | |||
@@ -47,7 +47,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 1, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"def adam(parameters, vs, sqrs, lr, t, beta1=0.9, beta2=0.999):\n", | |||
@@ -63,7 +65,9 @@ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 2, | |||
"metadata": {}, | |||
"metadata": { | |||
"collapsed": true | |||
}, | |||
"outputs": [], | |||
"source": [ | |||
"import numpy as np\n", | |||
@@ -267,7 +271,7 @@ | |||
], | |||
"metadata": { | |||
"kernelspec": { | |||
"display_name": "Python 3 (ipykernel)", | |||
"display_name": "Python 3", | |||
"language": "python", | |||
"name": "python3" | |||
}, | |||
@@ -281,7 +285,7 @@ | |||
"name": "python", | |||
"nbconvert_exporter": "python", | |||
"pygments_lexer": "ipython3", | |||
"version": "3.9.7" | |||
"version": "3.5.4" | |||
} | |||
}, | |||
"nbformat": 4, | |||
@@ -462,7 +462,7 @@ | |||
"name": "python", | |||
"nbconvert_exporter": "python", | |||
"pygments_lexer": "ipython3", | |||
"version": "3.7.9" | |||
"version": "3.5.4" | |||
} | |||
}, | |||
"nbformat": 4, | |||