【跟着李沐学AI读书笔记】微积分

在微分学中最重要的应用是优化问题,即考虑如何把事情做到最好。在深度学习中,我们“训练”模型,使它们在看到越来越多的数据时变得越来越好。通常情况下,变得更好意味着最小化一个损失函数,即一个衡量“我们的模型有多糟糕”这个问题的分数。我们将拟合模型的任务分解为两个关键问题:1.优化(optimization):用模型拟合观测数据的过程。2.泛化:数学原理和实践者的智慧,能够指导生成有效性超出用于训练的数据集本身的模型。

在深度学习中,通常选择对于模型参数可微的损失函数。简而言之,对于每个参数,如果我们把这个参数增加减少一个无穷小的量,我们可以知道损失会以多快的速度增加或减少。

%matplotlib inline
import numpy as np
from IPython import display
from d2l import torch as d2l


def f(x):
    return 3 * x ** 2 - 4 * x

def numerical_lim(f, x, h):
    return (f(x + h) - f(x)) / h

h = 0.1
for i in range(5):
    print(f'h={h:.5f}, numerical limit={numerical_lim(f, 1, h):.5f}')
    h *= 0.1

python的print字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,如果字符串里面没有表达式,那么前面加不加f输出应该都一样。

此处运行李沐老师的代码结果错误,在网上找了代码运行成功,以下是网上的代码和结果。

#import numpy as np
#from IPython import display
from d2l import torch as d2l
import matplotlib.pyplot as plt
import numpy as np
 
def f(x):
    return 3 * x ** 2 - 4 * x
def numerical_lim(f, x, h):
    return (f(x + h) - f(x)) / h
 
h = 0.1
for i in range(5):
    print(f'h={h:.5f}, numerical limit={numerical_lim(f, 1, h):.5f}')
    h *= 0.1
 
plt.figure(figsize=(3.5,2.5))  #图片尺寸大小
def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):
    """设置matplotlib的轴。"""
    axes.set_xlabel(xlabel)
    axes.set_ylabel(ylabel)
    axes.set_xscale(xscale)
    axes.set_yscale(yscale)
    axes.set_xlim(xlim)
    axes.set_ylim(ylim)
    if legend:
        axes.legend(legend)
    axes.grid()
def plot(X, Y=None, xlabel=None, ylabel=None, legend=None, xlim=None,
         ylim=None, xscale='linear', yscale='linear',
         fmts=('-', 'm--', 'g-.', 'r:'), axes=None):
    """绘制数据点。"""
    if legend is None:
        legend = []
 
 
    axes = axes if axes else d2l.plt.gca()
 
    # 如果 `X` 有一个轴,输出True
    def has_one_axis(X):
        return (hasattr(X, "ndim") and X.ndim == 1 or isinstance(X, list)
                and not hasattr(X[0], "__len__"))
 
    if has_one_axis(X):
        X = [X]
    if Y is None:
        X, Y = [[]] * len(X), X
    elif has_one_axis(Y):
        Y = [Y]
    if len(X) != len(Y):
        X = X * len(Y)
    axes.cla()
    for x, y, fmt in zip(X, Y, fmts):
        if len(x):
            axes.plot(x, y, fmt)
        else:
            axes.plot(y, fmt)
    set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend)
 
x = np.arange(0, 3, 0.1)
y = 2*x-3
plot(x, [f(x), 2 * x - 3], 'x', 'f(x)', legend=['f(x)', 'Tangent line (x=1)'])
plt.show()
 

【跟着李沐学AI读书笔记】微积分_第1张图片

plt.figure()中figsize是指定figure的宽和高,单位为英寸。axes.set_xlabel、axes.set_ylabel用于设置x轴、y轴的标签,axes.set_xscale、axes.set_yscale用于设置x轴、y轴的比例,'linear'为默认的缩放类型,axes.set_xlim、axes.set_ylim用于设置x轴、y轴视图限制。axes.legend用于在图上放置图例。axes.grid用于设置图表中的网格线。

None是一个特殊的对象,通常用作占位符,由默认值替换。

*fmts=('-', 'm--', 'g-.', 'r:')是什么意思没查到,待解决。估计是线的形状、颜色这些。

.gca()函数的作用是获得当前的axes对象。axes = axes if axes else d2l.plt.gca()这句未完全理解。

先跳过这里,因为时间原因,先看后面,之后有时间再继续注释。

【跟着李沐学AI读书笔记】微积分_第2张图片

 

 

你可能感兴趣的:(跟着李沐学AI笔记,人工智能)