xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Learning学习笔记,一步步亲手用python实现Logistic

来源:http://www.ccidsi.com 作者:最新解决方案 人气:56 发布时间:2020-01-23
摘要:便是如此easy,只要我们一步步把前边的援救函数搭建好,这里就能够超级轻便很清楚地组织模型。 唯风华正茂值得大器晚成提的是以此精确率怎么总括 的主题材料,大家的predict函数获

便是如此easy,只要我们一步步把前边的援救函数搭建好,这里就能够超级轻便很清楚地组织模型。唯风华正茂值得大器晚成提的是以此精确率怎么总括的主题材料,大家的predict函数获得的是几个列向量,这些跟我们的标签Y是相仿的样子。大家第朝气蓬勃可以让相互相减:**prediction_test

 

二、初始编制程序吧

上面大家利用“突显代码和注释 重视地点详细解释”的方法来一步步兑现:

# 导入数据,“_orig”代表这里是原始数据,我们还要进一步处理才能使用:train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()#由数据集获取一些基本参数,如训练样本数m,图片大小:m_train = train_set_x_orig.shape[0] #训练集大小209m_test = test_set_x_orig.shape[0] #测试集大小209num_px = train_set_x_orig.shape[1] #图片宽度64,大小是64×64#将图片数据向量化:train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).Ttest_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0],-1).T#对数据进行标准化:train_set_x = train_set_x_flatten/255.test_set_x = test_set_x_flatten/255.

地点的代码有几点要表明:

  1. 多少导入是直接用吴恩达网课中的数据集,他提供了贰个接口load_dataset(卡塔尔(قطر‎能够直接导入数据,假设供给多少的话能够在篇章下方留言得到。这里根本是展示格局,完全能够用自个儿的数码集来操作。数据集是部分图片,大家要锻炼叁个识别猫的分类器。train_set_x_orig,也正是大家的庐山面目目数据形状(209, 64, 64, 3)率先维代表m,即样品数量,第二维第3个维度分别是图形的长和宽,第四维代表图片的MuranoGB多个通道
  2. numpy包有敬爱的有关矩阵“形状”的艺术:.shape.reshape().shape能够收获八个矩阵的形制,于是大家得以由此[i]来精晓每黄金年代维的轻重;.reshape(卡塔尔用来重构矩阵的形象,直接在里头填写维度就能够,还会有一点点例外用法,比方此处的用法:当大家要把四个向量X那几个四维向量扁平化成X_flatten(m,a* b* c)的二维向量,可以写X_flatten=X.reshape(X.shape[0],-1)就可以,此中“-1”代表把剩余维度压扁的格局。而代码中还应该有二个.T,代表转置,因为大家愿意把演习样品压缩成(64* 64 *3,m)的形式。
  3. 干什么要求标准化?在表明为什么要条件前,大家无妨说说经常的尺度是怎么办的:先求出数据的均值和方差,然后对每三个样书数量,先减去均值,然后除以方差,也正是/σ2,说白了正是转产生标准正态布满!那样,每一个特征都转造成了同风流罗曼蒂克的布满,不管原本的范围是何等,今后都基本节制在平等的界定内了。那样做的补益是什么呢?且看上面四个等高线图:图片 1未规范化图片 2规格之后上边四个图体现了数码在未标准化和规范之后的景色。原数据的差别特点的限定可能会有异常的大差异,举例一堆数量中“年龄”的界定就十分小,或许20岁 ~ 五十柒周岁以内,可是另三个特征“年薪”或许波动范围就极大,可能0.5万 ~ 1000万,这种景况下回引致大家的等高线图变得分外“扁平”,在梯度下跌的时候会很轻松走弯路,因此梯度下跌会比异常的慢,精度也不高。但是经过规范化之后,等高线就变规矩了,就相当轻巧梯度下落了。其余,对于图片数据的话,进行标准很简单,因为HavalGB八个通道的界定都以255,大家对图片的拍卖就是直接除以255就可以。

时至明日,数据预管理就完事了,大家步向下一步:

1. 激活函数/sigmoid函数:

def sigmoid: a = 1/(1 np.exp return a

有如此easy,sigmoid的公式正是1/,这里用np.exp()就足以轻便创设。

2. 参数开头化函数(给参数都起来化为0):

def initialize_with_zeros: w = np.zeros b = 0 return w,b

W是叁个列向量,传入维度dim,重回shape为的W,b正是三个数。这里运用的艺术是np.zeros.

3.propagate函数:这里再一次解释一下那个propagate,它含有了forward-propagate和backward-propagate,即正向传播和反向传来。正向传播求的是cost,反向传播是从cost的表达式倒推W和b的偏导数,当然大家会先求出Z的偏导数。那多少个方向的流传也是神经网络的精髓。具体尾数怎么求,这里就不推导了,就是超级轻便的求导嘛,公式请参见上风流洒脱篇小说:神经网络编程原则&Logistic Regression的算法深入解析那么小编就平昔上代码了:

def propagate(w, b, X, Y): """ 传参: w -- 权重, shape: (num_px * num_px * 3, 1) b -- 偏置项, 一个标量 X -- 数据集,shape: (num_px * num_px * 3, m),m为样本数 Y -- 真实标签,shape:  返回值: cost, dw ,db,后两者放在一个字典grads里 """ #获取样本数m: m = X.shape[1] # 前向传播 : A = sigmoid(np.dot #调用前面写的sigmoid函数 cost = -(np.sum(Y*np.log*np.log/m # 反向传播: dZ = A-Y dw = (np.dot/m db = (np.sum/m #返回值: grads = {"dw": dw, "db": db} return grads, cost

此间须要非凡表达的正是,numpy中矩阵的点乘,也正是内积运算,是用np.dot,它必要前贰个矩阵的列数等于后三个矩阵的行数。但矩阵也得以开展要素相乘(element product),正是多个相像形状的矩阵对于成分相乘得到多个新的同等形状的矩阵,能够直接用A * B,或者用np.multiply。上边的代码中,既有一些乘,也可能有成分相乘,我们在写的时候,先搞理解形状,再分明用哪些乘法。上边还恐怕有各类numpy的数学函数,对矩阵求log就用np.log(),对矩阵成分求和就用np.sum(),贼方便。

4.optimize函数:有了地点这一个函数的加持,optimize函数就很好写了,就是在迭代中调用各样大家刚刚写的函数正是:

def optimize(w, b, X, Y, num_iterations, learning_rate, print_cost = False): #定义一个costs数组,存放每若干次迭代后的cost,从而可以画图看看cost的变化趋势: costs = [] #进行迭代: for i in range(num_iterations): # 用propagate计算出每次迭代后的cost和梯度: grads, cost = propagate dw = grads["dw"] db = grads["db"] # 用上面得到的梯度来更新参数: w = w - learning_rate*dw b = b - learning_rate*db # 每100次迭代,保存一个cost看看: if i % 100 == 0: costs.append # 这个可以不在意,我们可以每100次把cost打印出来看看,从而随时掌握模型的进展: if print_cost and i % 100 == 0: print ("Cost after iteration %i: %f" % #迭代完毕,将最终的各个参数放进字典,并返回: params = {"w": w, "b": b} grads = {"dw": dw, "db": db} return params, grads, costs

以此函数就没怎么好解释的了。

5.predict函数:前瞻就一点也不细略了,大家已经学到了参数W和b,那么让我们的数额经过安顿这一个参数的模型就可获得预测值。注意,X->Z->激活获得A,当时还并非预测值,由sigmoid函数大家清楚,A的节制是01,可是我们的标签值是0和1,由此,大家得以实行法规:0.51的A对于预测值1,小于0.5的应和预测值0:

def predict: m = X.shape[1] Y_prediction = np.zeros A = sigmoid(np.dot for i in range: if A[0,i]>0.5: Y_prediction[0,i] = 1 else: Y_prediction[0,i] = 0 return Y_prediction

恭贺,若是您有耐性看见这里了。。。那。。。作者实在忍不住送您大器晚成朵fa了:

图片 3

毕竟自身要好都不相信任会有多少人确实去看这么干Baba的经过。不过自个儿信赖,每生龙活虎份恒心和提交都有回报吧,学习那事儿,急不来。

至今,大家早就创设好了全部的支援函数。接下来就是整合在一块儿,然后用大家的数码去练习、预测了!

def logistic_model(X_train,Y_train,X_test,Y_test,learning_rate=0.1,num_iterations=2000,print_cost=False): #获特征维度,初始化参数: dim = X_train.shape[0] W,b = initialize_with_zeros #梯度下降,迭代求出模型参数: params,grads,costs = optimize(W,b,X_train,Y_train,num_iterations,learning_rate,print_cost) W = params['w'] b = params['b'] #用学得的参数进行预测: prediction_train = predict(W,b,X_test) prediction_test = predict(W,b,X_train) #计算准确率,分别在训练集和测试集上: accuracy_train = 1 - np.mean(np.abs(prediction_train - Y_train)) accuracy_test = 1 - np.mean(np.abs(prediction_test - Y_test)) print("Accuracy on train set:",accuracy_train ) print("Accuracy on test set:",accuracy_test ) #为了便于分析和检查,我们把得到的所有参数、超参数都存进一个字典返回出来: d = {"costs": costs, "Y_prediction_test": prediction_test , "Y_prediction_train" : prediction_train , "w" : w, "b" : b, "learning_rate" : learning_rate, "num_iterations": num_iterations, "train_acy":train_acy, "test_acy":test_acy } return d

Deep Neural Networks

神经网络 (Neural Network卡塔尔(قطر‎并非四个极度的名词,可是随着数据、总计力、理论三方面的突破,近几年来才迎来了临月后的阳春。神经网络重借使由神经元 构成的,三个neuron平日是多少个输入的线性组合 四个激活函数,个中激活函数往往是非线性函数。像人类的大脑同样,许多少个神经元由七种链接组合起来然后,就颇负了精锐的力量。Andrew黄金时代开端就给了多个最简易的例子。

1State of Qatar 单神经元互连网 (single neural network卡塔尔国倘使大家的输入里唯有一个变量,在它之上应用贰个ReLU函数就整合了一个单神经元的网络。ReLU函数全称是Rectified Linear Unit,不要被那个名称勉强到了,其实深度学习完全部是绣花枕头,ReLU其实正是四个max函数,有一些肖似于MA奥迪Q7S。它的造型是那般的:

图片 4单神经互联网图片 5sigmoid函数

上海体育场地是价值观的sigmoid函数,不独有常用在logistic regression中,深度学习中也会使用到的。当你相比ReLU函数和sigmoid函数时就能够发觉:ReLU将某些的数据废弃替换为0,那使得总括大范围的数量时比sigmoid越来越快(试想倘使每生机勃勃层ReLU抛弃了二分一的不算数据,那么4层以往数据量正是原本的6%,当然真实的动静未有如此简单),而ReLU另生龙活虎有的的导数为1,在反向传来时总计梯度极低价;sigmoid函数则随处可导,但是在超过一半的值域上导数相当小,那使得它从未过滤掉不须要的数量的技巧、大幅收缩了梯度下落的读书进程,何况在反向传播时大概会有梯度消失的主题素材。

2卡塔尔(قطر‎ 多神经元互连网 (multiple neural networkState of Qatar

图片 6多神经元网络

深度学习不仅可以够使用于守旧的布局化数据,也应用在声音、图像、文字等非构造化的数据上。前风流罗曼蒂克段时间讲课的时候,提到了纵深学习的接受。作者想表明深度学习与观念方法相比较,更便利管理非布局化的数码。结果居然不经常把structured这么些词给忘掉了,卡了半天最终忽悠了三个二维vs.多维——其实作者的原意是structured vs. unstructured。幸而那只是一语带过,不是知识点,预计也没人注意到。可知尽信书则比不上无书,特别是在deep learning那样新兴、滥竽充数的行当。

图片 7布局化数据和非构造化数据

图片 8

Y_test,倘若对应地点雷同,则产生0,不相同的话要么是1要么是-1,于是再取相对值np.abs**(prediction_test

Y_test卡塔尔,就也正是得到了“哪些地方预测错了”的三个向量,于是大家再求二个均值np.mean(np.abs(prediction_test

  • Y_test)),就是“错误率”了,然后用1来减去它,就是正确率了!

自己依据理论知识 Python实行两大模块来总括一下。注意那边只是小编个人对学科的下结论,侧重于自己软弱的环节,提议感兴趣的读者依然去Coursera上购销教材,那样学习得才更完善。经费恐慌的读者也不用忧郁,前7天是无偿的。

那是促成神经互连网时根本采纳的播报,更详实的能够查阅numpy文书档案搜索broadcasting。

居功至伟告成!试试效果:

d = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 2000, learning_rate = 0.005, print_cost = True)

运作模型就超级轻便了,把大家的数码集穿进去,设置我们想要的超参数,首如果学习率(learning rate)、迭代数(num_iterations),然后把print_cost设为True,那样能够在模型练习进程中打字与印刷cost的变化趋向。

运作,查看结果:

Cost after iteration 0: 0.693147Cost after iteration 100: 0.584508Cost after iteration 200: 0.466949Cost after iteration 300: 0.376007Cost after iteration 400: 0.331463Cost after iteration 500: 0.303273Cost after iteration 600: 0.279880Cost after iteration 700: 0.260042Cost after iteration 800: 0.242941Cost after iteration 900: 0.228004Cost after iteration 1000: 0.214820Cost after iteration 1100: 0.203078Cost after iteration 1200: 0.192544Cost after iteration 1300: 0.183033Cost after iteration 1400: 0.174399Cost after iteration 1500: 0.166521Cost after iteration 1600: 0.159305Cost after iteration 1700: 0.152667Cost after iteration 1800: 0.146542Cost after iteration 1900: 0.140872---------------------train accuracy: 99.04306220095694 %test accuracy: 70.0 %

可以观望,随着演习的扩充,cost在不停地回降,那表达的参数在变得更加好。最后,在教练集上的正确率到达了99%以上,测量试验集正确率为十分七。哈哈,很通晓,大家的模子过拟合了,测量试验集的准确率还应该有待进步。而是这么些不首要!首要的是我们亲手再没有用别样框架的情况下用python把Logistic regression给落到实处了叁遍,每二个细节都明明白白!٩(๑>◡<๑State of Qatar۶并且,那才不过是二个Logistic regression,也就是1层的独有三个神经元的神经互连网,能对图纸分类达到规定的标准80%的准确率,我们早就很棒了!

其实,神经网络无非就是在Logistic regression的底子上,多了多少个隐层,每层多了部分神经元,卷积神经互连网无非正是再多了多少个独特的filter,多了某个有一定功能的层,可是宗旨都是跟Logistic Regression一样的:

前向传播求损失,反向传播求倒数;不断迭代和更新,调到场测精确度。

咦嗬!才发掘自个儿还或许有写诗的天然。

图片 9

本文就到此截止,终于终止了,出去吃串串了~本身的任何深度学习小说:Logistic回归:最底蕴的神经网络神经网络编制程序原则&Logistic Regression的算法深入分析神经网络参数带头化的学识神经网络中的优化算法迎接关心笔者的专项论题:DeepLearning.ai学习笔记

Coursera和deeplearning.ai同盟的Deep Learning Specialization出得真是慢啊……未来只出了Course 1:Neural Networks and Deep Learning,之后还或者有4个courses。尽管在本身和超过一半深度学习从业人士看来是可怜根基的,可是有时习题居然还大概会做错。鄙人天分平庸,看来照旧得通常重温一下这种幼功科目。谦逊学习切忌自空自傲。

在逻辑回归中,以计算z为例,$ z =  w^{T} b $,你能够用for循环来达成。

生龙活虎、算法搭建步骤

  • 搞了解数据的形态、维度
  • 将数据转载成向量(image to vector)方便管理
  • 将数据标准(standardize),那样更加好教练
  • 激活函数(此处大家选择sigmoid函数)--activation function
  • 参数最先化函数--initialization
  • 传扬函数(这里是用来求损失cost并对W、b求导,即dW、db)--propagate
  • 优化函数(迭代更新W和b,来相当小化cost)--optimize
  • 估算函数(依据学习到的W和b来拓宽张望)--predict
  • 能够一直输入练习集、预测集、超参数,然后交到模型参数和准确率

上边这么多支持函数恐怕看的令人有个别懵逼,由此小编花了半钟头在PowerPoint里面画了这一个图,以便更明了地证实它们之间的关联:

图片 10Logistic regression各函数构造图

构造扶助函数(helper function)是为着让我们的构造更清楚,更便于调试和更换。上边大家根据上面包车型大巴步子二个一个来。

Python

自家以为这一块非常精良,因为不少tutorial里面只是数语带过,安德鲁讲得比超级多。在矩阵运算中,假如不精心到broadcasting,现身了bug也不太好调。所以小编在此根本收拾一下:布罗兹casting是指在对分裂形态的矩阵张开四则运算时,numpy对小矩阵的传播管理(其实便是ctrl-C ctrl-V,使得小矩阵“长大”成能和大矩阵协调运算的法门)。具体的证实在此:矩阵的扩散运算。那一个作用很方便,比方在测算np.dot

  • b的时候,因为有的时候b只是个标量 ,而首先项大概是个矩阵,broadcasting使得这一步计算变得很便利。

>>> a = np.array([1.0, 2.0, 3.0])>>> b = 2.0>>> a * b # 在乘法计算时,numpy的矩阵传播机制将b那一个标量自动实行为np.array([2.0, 2.0, 2.0]State of Qatar,使其能与a的每三个因素相乘。array([ 2., 4., 6.])

举个例子说矩阵的normalization by row,是矩阵除以每一行的norm:

图片 11normalizing rows

上航海用体育地方的兑现方式为:>>> x_norm = np.linalg.norm(x, ord=2, axis=1, keepdims=True)>>> x = x/x_norm在那之中ord=2表示norm 2,axis=1表示horizontally即每生龙活虎行 的乘除,axis=0表示vertically即每一列 (by column卡塔尔国 的精打细算。keepdims=True是为着以免numpy输出rank 1 array——shape为,使用了keepdims=True后输出的shape是,这两个之间的不如会在下文中展现。

另三个显示broadcasting高效之处是softmax函数,常常用于标准多品类分类难点的出口,使得各连串输出的总可能率加起来为1。由下图softmax的函数表明可以见到,分母和原矩阵是见仁见智形态的。分母比原矩阵少生龙活虎维,即当原矩阵是1*n时,分母是那n个数的和,所以是叁个标量;当原矩阵是m*n时,分母是每行n个数的和,所以是叁个m*1的矩阵。broadcasting使得分子一直除以分母就足以获得原矩阵每一种数规范化的结果。

图片 12softmax函数

softmax的代码为:>>> x_exp = np.exp # 用numpy的exp并非math中的exp是因为math包的函数平时只选拔实数的输入,而numpy可以选取张量输入,因而在深度学习中,我们少之又少用math,而多用numpy的章程,前边的log也是同理。>>> x_sum = np.sum(x_exp, axis=1, keepdims=True)>>> s = x_exp/x_sum>>> return s

有了传播机制,当八个矩阵维度相符、恐怕个中有多个矩阵的贰个维度为1的情形下,八个矩阵就足以开展逐个成分的加减乘除运算了。但还要,为了减小出bug的大概,建议Dolly用assert

  • shape来检查矩阵的形状,也许用reshape方法。

1) dot product np.dot正是平淡无奇的线性代数中的矩阵乘法,是依据矩阵乘法的法规来运算的,须求三个矩阵的维度附和线性代数乘法的运算规律。2) element-wise product np.multiply()和*都以因素积,是数组成分每一种总括。请在意,broadcasting适用于成分积的情形实际不是点积。如:

a = np.random.randn # a.shape = b = np.random.randn # b.shape = c = a*b会报错,因为b需要是4*1或者3*1的情景本事broadcasting。c = np.dot会博得一个4*2的矩阵。

3) outer product numpy的outer product中out[i, j] = a[i] * b[j],即五个风度翩翩维矩阵a = [a0, a1, ..., aM]和b = [b0, b1, ..., bN]的outer product是:[[a0*b0 a0*b1 ... a0*bN ] [a1*b0 . [ ... . [aM*b0 aM*bN ]]

>>> import numpy as np>>> x1 = [9, 2, 5, 0, 0, 7, 5, 0, 0, 0, 9, 2, 5, 0, 0]>>> x2 = [9, 2, 2, 9, 0, 9, 2, 5, 0, 0, 9, 2, 5, 0, 0]>>> np.dot278>>> np.outer[[81 18 18 81 0 81 18 45 0 0 81 18 45 0 0][18 4 4 18 0 18 4 10 0 0 18 4 10 0 0][45 10 10 45 0 45 10 25 0 0 45 10 25 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][63 14 14 63 0 63 14 35 0 0 63 14 35 0 0][45 10 10 45 0 45 10 25 0 0 45 10 25 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][81 18 18 81 0 81 18 45 0 0 81 18 45 0 0][18 4 4 18 0 18 4 10 0 0 18 4 10 0 0][45 10 10 45 0 45 10 25 0 0 45 10 25 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]>>> np.multiply # 或者x1*x2[81 4 10 0 0 63 10 0 0 0 81 4 25 0 0]

这一片段就是尽量用矩阵运算并不是for loop。比方在反向传播 (back propagation卡塔尔 时,计算每叁个样板loss function并加成cost function时,以至对每叁个参数举办更新时,都用矩阵运算。只可是iteration时得用for loop,那估算是回天乏术制止的了。

图片 13Andrew展示使用for loop和vectorization的演算时间相差300倍

* 此中numpy.random.randn(d0, d1, ... dn卡塔尔国再次来到的是从标准平均分布中抽样的n维数组。

要防止用相仿于那般的rank 1 array,这样的array乍看是一个5*1的matrix,不过在总结中会导致与5*1矩阵完全两样的结果。幸免的点子是在概念时设定好维度或reshape方法,只怕在测算时用多assert

  • shape的检查。

图片 14a为rank 1 array时的结果

假若输入是np.random.randn(5, 1卡塔尔国的时候,输出的结果就全盘两样,固然a.T上去是意气风发致的。

图片 15a为5*1矩阵时结果

因为篇幅约束不久前就先写到这里,感兴趣的意中大家得以关切本人的《吴恩达Coursera Deep Learning学习笔记 1 》。在这里间引用萌萌哒Andrew的话与君共勉:

In the CS world, all of us are used to needing to jump every ~5 years onto new technologies and paradigms of thinking (internet->cloud->mobile->AI/machine learning), because new technologies get invented at that pace that obsolete parts of what we were previously doing. So CS people are used to learning new things all the time.

在 CS 世界中,大家全体人都习于旧贯于每 5 年将在跳到新本事和思量形式(网络→云→移动→AI/机器学习),因为新才干以那样的进程发明。所以,CS 人也一向习贯于不断学习新的事物。

$A.sum(axis=0卡塔尔国$代表竖直求和,假若axis = 1就是程度求和。

这一次的前言有一点啰嗦了。。。主借使怕有个别读者说“明明能够用机器学习包几行代码消除,为什么偏要用纯python费力去完结”。好了,步向正题:

Andrew第生机勃勃堂课意气风发共四周,周周的课业量都在扩充。能够看看Coursera逐步扩充了演练题的比例,那少年老成迈入笔者个人很向往,提出大家也都去做一下课后的演习题,极度Python部分的。

numpy和播发使大家得以用意气风发行代码完结超多运算。

前方的Logistic回归:最底工的神经互连网和神经网络编制程序原则&Logistic Regression的算法解析批注了Logistic regression的基本原理,而且小编提到过那些玩意儿以小编之见是上学神经网络和深度学习的底子,学到前面就意识,其实只要这些事物弄通晓了,前面包车型客车就很好通晓。别的,尽管说今后有众多广大的机器学习包和深度学习框架,像sklearn、TensorFlow、Keras等等,让我们兑现多少个神经网络拾壹分轻巧,可是生龙活虎旦你不了然原理,纵然给您二个框架,里面包车型客车雅量的函数和艺术您依然不亮堂怎么样动手,不了然哪些时候该利用什么,而这几个框架之中平常提到的“前向传来”、“反向传播”、“总括图”、各个梯度下落、mini-batch、种种initialization方法等等你也不便驾驭,更别提怎样针对你的骨子里境况在对症发药了。因而,小编的纵深学习连串笔记,主假使上课神经网络的思绪、算法、原理,然后前期首要采纳python和numpy来落成,独有到大家把神经互联网基本说完,才会起始采纳诸如TensorFlow这样的框架来贯彻。当然,那也是本身正在听的吴恩达的吃水学习种类课程的特色,不急不躁,意志地用最节省的方式来举行具备的规则,那样技术心心相印,玩转各样框架。

用作一名终生学习奉行者,小编自始自终地读书各样深度学习和机械学习的新知识。叁个无聊的休假里本身顿然想到:反正同样要记笔记,为什么不把自家读书的笔记写成博客供我们一齐调换啊?于是,作者就化身数据女侠,筹算用博客共享的不二秘诀拉开本人的深度学习深度学习之旅。正文仅供就学调换使用,侵犯权益必删,不用于生意指标,转发须注脚出处。

图片 16

以神经互联网的组织看逻辑回归 (Logistic Regression卡塔尔(قطر‎

大家所熟谙的逻辑回归能够作为一个最简便易行的神经互连网,此中z是输入特征的线性组合,而sigmoid函数是对z的非线性调换。因而,安德鲁以Logistic regression为切入口、以矢量化后的图样为输入,营造了多少个最根基的神经互连网。图片的输入本来是三个维度的(二维的像素点再增进TucsonGB二种颜色),通过image2vector将每一张图片转变为几个宽为1的矩阵——一个将维度的张量flatten为的小才干:X_flatten = X.reshape(X.shape[0], -1State of Qatar.T,个中X.T是X的转置,而a代表的是样品数。

图片 17以神经网络的结果表示逻辑回归:识别图片是不是是猫图片 18Logistic regression的loss function(损失函数,二个样书的损失)与cost function(代价函数,练习多少颇有样品损失的和)

席卷来说,神经网络的建立模型主要不外乎以下多少个第一步骤:1. 概念模型构造,比方有个别层、什么激活函数、多少输入特征,等等;2. 伊始化模型参数,在logistic regression这些例子中,只需起初化W和b为0就能够了,而且无需进入一些振动;3. 开展num_iterations次循环: 3.1 前向传来:总计当前的代价 3.2 反向传来:计算当前的梯度 3.3 梯度下落:更新参数,更新后的参数为θ_updated=θ−αdθ,此中α是学习率,dθ其实就是dJ/dθ。 直到iteration截至,可能梯度相像为零、参数不再变化停止。

中间sigmoid函数的导数要铭记:sigmoid_derivative=σState of Qatar,还有八个导数公式:

图片 19逻辑回归的梯度下落中dw和db的公式

其代码在前向传播的函数中贯彻如下:m = X.shape[1]A = sigmoid(np.dot b)cost = -np.sum(Y*np.log *np.log/mdw = np.dot.T卡塔尔国/mdb = np.sum/m为了保障在矩阵总括和broadcasting中不出错,举办如下的断言:assert(dw.shape == w.shapeState of Qatarassert(db.dtype == float卡塔尔(قطر‎cost = np.squeeze # 缩短cost的维度使其变为多少个数assert(cost.shape ==

举例说a 的 shape是(5, 卡塔尔(قطر‎ ,当您计算$np.dot(a, a.TState of Qatar$的时候得到的是叁个实数,a和a的转置,它们的shape都是(5, State of Qatar。

前三周周周最终有个对deep learning heroes的采摘,除了第15日的Geoffrey Hinton小编看了之外,前边的Pieter Abbeel和IanGoodfellow作者都没看,时间太长了。主即便因为教科书对于学子过于根底的话,学习时小编就便于注意力不集中,所以作者就不想再消费有限的集中力了,以往有意思味还有或许会回来看一下的。

固然要尽量选择向量化,不过在开展频繁梯度下跌的迭代照旧要用到for循环,那么些不可防止。

当您用三个m*n的矩阵加(减乘除)上1*n的向量时,python会自动把1*n的向量竖直复制产生m*n再相加。

若果您得到了(5,State of Qatar 你能够把它reshape成(5, 1State of Qatar或(1, 5卡塔尔(قطر‎,reshape是快速的O(1)复杂度,所以放心大胆的用它,不用忧郁。

ng的提议,在实现神经互连网的时候不要采用shape为(n,State of Qatar那样的变量,要用(n,1卡塔尔。

dw是代价函数对w的导数,db是代价函数对b的导数,如若不记得了足以翻看上生龙活虎节课,逻辑回归的内容。

 

别的你在代码中做了超多政工后恐怕不记得恐怕不分明a是何等的时候,用$assert( a.shape == (5,1State of Qatar State of Qatar$来检查你的矩阵的维度。

 

CPU和GPU都有并行化的命令,有的时候候叫SIMD( single instruction multiple data 卡塔尔国。

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:Learning学习笔记,一步步亲手用python实现Logistic

关键词: 吴恩 Python 笔记 DL 学习笔记

上一篇:文本分类,学习笔记TF036

下一篇:没有了

最火资讯