Pytorch入门——线性回归与分类
PytorchPytorch和Tensorflow是两个在深度学习领域占绝对主流地位的框架两者互有优势,例如pytorch采用动态计算图,在某些情况如RNN的time step上更灵活,而tensorflow在分布式训练上能力更强总的来说就是两者完全靠个人选择,个人认为还是pytorch更易于理解些
线性回归线性回归即在二维平面上给定若干个点,求解其线性关系线性回归问题非常适合加深对神经网络基本理论的理解以及入门任意一个深度学习框架下面就以这个例子作为Pytorch(1.8.2)的入门
构造数据集首先利用numpy构造数据集,可视化如下图所示
12345678910def createData(): X = np.linspace(-1, 1, 200) np.random.shuffle(X) Y = 0.5 * X + 2 + np.random.normal(0, 0.05, (200,)) X = np.expand_dims(X, 1) # 使X.shape为(200, 1),表示200个一维数据 Y = np.expand_dims(Y, 1 ...
Keras入门——线性回归与分类
KerasKeras是一个用纯Python编写的高级神经网络API它能够以TensorFlow、CNTK 或者Theano作为后端运行
因为keras是主流神经网络框架再次封装后的高级API,所以它的最大优点就是编写效率很高除了极少极少的灵活功能无法很好实现,keras对于绝大多数任务都能以最轻松的方式实现,所以对于神经网络框架入门也十分友好
然而同样由于keras是再封装的高层API,它的执行效率难免较低尽管如此,keras仍然是一个非常优秀的框架
(注:keras2.3.0将会是最后一个多后端 Keras 主版本,该版本及之后keras已被内置进tensorflow2,keras官方建议使用 import tensorflow.keras 替代import keras)
线性回归线性回归即在二维平面上给定若干个点,求解其线性关系线性回归问题非常适合加深对神经网络基本理论的理解以及入门任意一个深度学习框架下面就以这个例子作为keras 2.4(tensorflow2.3.0 backend)的入门
构造数据集首先利用numpy构造数据集,可视化如下图所示
12345678910111 ...
神经网络中常见的optimizer
SGD梯度下降法(gradient descent)是最经典的神经网络参数更新方法,其表达式为
\boldsymbol{W}\leftarrow \boldsymbol{W}-\eta \frac{\partial L}{\partial \boldsymbol{W}}其中$\boldsymbol{W}$为参数矩阵,$\frac{\partial L}{\partial \boldsymbol{W}}$为梯度,$\eta$为学习率
梯度下降法有BGD、SGD、MBGD三种批量梯度下降BGD是每次参数更新都用所有样本计算梯度随机梯度下降SGD是每次随机选择一个样本计算梯度而小批梯度下降MBGD则是前两者的折中,每次计算一个mini-batch样本的梯度
BGD由于每次更新都要用到所有样本,所以收敛较慢而SGD由于每次更新使用样本少,可能导致陷入局部最优所以实际中一般都采用MBGD
需要注意的是,大部分神经网络框架中的SGD指的就是MBGD
抛开样本量的问题只关注梯度下降法的数学形式会发现朴素的梯度下降在一些情况下有效率较低的缺点考虑目标函数$f(x,y)=\frac{1}{10}x^2+ ...