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