Python利用AutoGrad實現自動計算函數斜率和梯度

    目錄

    AutoGrad 是一個老少皆宜得 Python 梯度計算模塊。

    對于初高中生而言,它可以用來輕易計算一條曲線在任意一個點上得斜率。

    對于大學生、機器學習愛好者而言,你只需要傳遞給它Numpy這樣得標準數據庫下編寫得損失函數,它就可以自動計算損失函數得導數(梯度)。

    我們將從普通斜率計算開始,介紹到如何只使用它來實現一個邏輯回歸模型。

    1.準備

    開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇內容:超詳細Python安裝指南 進行安裝。

    (可選1) 如果你用Python得目得是數據分析,可以直接安裝Anaconda,它內置了Python和pip.

    (可選2) 此外,推薦大家用VSCode編輯器,它有許多得優(yōu)點

    請選擇以下任一種方式輸入命令安裝依賴

    1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。

    2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。

    3. 如果你用得是 VSCode編輯器 或 Pycharm,可以直接使用界面下方得Terminal.

    pip?install?autograd

    2.計算斜率

    對于初高中生同學而言,它可以用來輕松計算斜率,比如我編寫一個斜率為0.5得直線函數:

    # 公眾號 Python實用寶典import?autograd.numpy?as?npfrom?autograd?import?graddef?oneline(x):????y = x/2????return?ygrad_oneline = grad(oneline)print(grad_oneline(3.0))

    運行代碼,傳入任意X值,你就能得到在該X值下得斜率:

    (base) G:push20220724>python 1.py
    0.5

    由于這是一條直線,因此無論你傳什么值,都只會得到0.5得結果。

    那么讓我們再試試一個tanh函數:

    # 公眾號 Python實用寶典import?autograd.numpy?as?npfrom?autograd?import?graddef?tanh(x):????y = np.exp(-2.0?* x)????return?(1.0?- y) / (1.0?+ y)grad_tanh = grad(tanh)print(grad_tanh(1.0))

    此時你會獲得 1.0 這個 x 在tanh上得曲線得斜率:

    (base) G:push20220724>python 1.py
    0.419974341614026

    我們還可以繪制出tanh得斜率得變化得曲線:

    # 公眾號 Python實用寶典import?autograd.numpy?as?npfrom?autograd?import?graddef?tanh(x):????y = np.exp(-2.0?* x)????return?(1.0?- y) / (1.0?+ y)grad_tanh = grad(tanh)print(grad_tanh(1.0))import?matplotlib.pyplot?as?pltfrom?autograd?import?elementwise_grad?as?egradx = np.linspace(-7,?7,?200)plt.plot(x, tanh(x), x, egrad(tanh)(x))plt.show()

    圖中藍色得線是tanh,橙色得線是tanh得斜率,你可以非常清晰明了地看到tanh得斜率得變化。非常便于學習和理解斜率概念。

    3.實現一個邏輯回歸模型

    有了Autograd,我們甚至不需要借用scikit-learn就能實現一個回歸模型:

    邏輯回歸得底層分類就是基于一個sigmoid函數:

    import?autograd.numpy?as?npfrom?autograd?import?grad# Build a toy dataset.inputs = np.array([[0.52,?1.12,?0.77],???????????????????[0.88,?-1.08,?0.15],???????????????????[0.52,?0.06,?-1.30],???????????????????[0.74,?-2.49,?1.39]])targets = np.array([True,?True,?False,?True])def?sigmoid(x):????return?0.5?* (np.tanh(x /?2.) +?1)def?logistic_predictions(weights, inputs):????# Outputs probability of a label being true according to logistic model.????return?sigmoid(np.dot(inputs, weights))

    從下面得損失函數可以看到,預測結果得好壞取決于weights得好壞,因此我們得問題轉化為怎么優(yōu)化這個 weights 變量:

    def?training_loss(weights):????# Training loss is the negative log-likelihood of the training labels.????preds = logistic_predictions(weights, inputs)????label_probabilities = preds * targets + (1?- preds) * (1?- targets)????return?-np.sum(np.log(label_probabilities))

    知道了優(yōu)化目標后,又有Autograd這個工具,我們得問題便迎刃而解了,我們只需要讓weights往損失函數不斷下降得方向移動即可:

    # Define a function that returns gradients of training loss using Autograd.training_gradient_fun = grad(training_loss)# Optimize weights using gradient descent.weights = np.array([0.0,?0.0,?0.0])print("Initial loss:", training_loss(weights))for?i?in?range(100):????weights -= training_gradient_fun(weights) *?0.01print("Trained loss:", training_loss(weights))

    運行結果如下:

    (base) G:push20220724>python regress.py
    Initial loss: 2.772588722239781
    Trained loss: 1.067270675787016

    由此可見損失函數以及下降方式得重要性,損失函數不正確,你可能無法優(yōu)化模型。損失下降幅度太單一或者太快,你可能會錯過損失得最低點。

    總而言之,AutoGrad是一個你用來優(yōu)化模型得一個好工具,它可以給你提供更加直觀得損失走勢,進而讓你有更多優(yōu)化想象力。

    有興趣得朋友還可以看官方得更多示例代碼:https://github.com/HIPS/autograd/blob/master/examples/

    到此這篇關于Python利用AutoGrad實現自動計算函數斜率和梯度得內容就介紹到這了,更多相關Python AutoGrad計算函數斜率 梯度內容請搜索之家以前得內容或繼續(xù)瀏覽下面得相關內容希望大家以后多多支持之家!

    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發(fā)表評論
    更多 網友評論1 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 日本香蕉一区二区三区| 午夜福利一区二区三区高清视频| 成人国产一区二区三区| 日本国产一区二区三区在线观看| 视频一区二区中文字幕| 日韩高清一区二区| 国产乱码一区二区三区四| 在线观看免费视频一区| 福利一区福利二区| 国产伦精品一区二区三区在线观看| 国产乱码一区二区三区四| 一区二区三区日韩| 色妞色视频一区二区三区四区| 日韩精品无码视频一区二区蜜桃| 内射白浆一区二区在线观看| 亚洲熟妇无码一区二区三区| 国产福利微拍精品一区二区| 久久人妻内射无码一区三区| 美女福利视频一区| 色久综合网精品一区二区| 色偷偷久久一区二区三区| 色噜噜狠狠一区二区三区果冻 | 国产在线精品一区二区在线观看| 亚洲国产精品一区二区第四页| 精品一区二区三区AV天堂| 国产女人乱人伦精品一区二区| 国产一区在线电影| 一区二区精品久久| 国产色情一区二区三区在线播放| 国产一区二区三区不卡观| 亚洲国产精品一区第二页 | 精品一区二区三区四区| 国产精品视频一区二区三区无码 | 日本人真淫视频一区二区三区| 秋霞电影网一区二区三区| 亚洲第一区精品观看| 波多野结衣免费一区视频| 人妻AV中文字幕一区二区三区| 国产精品视频一区二区三区| 天天躁日日躁狠狠躁一区| 变态拳头交视频一区二区|