PyTorch学习基础知识二

Posted hhh江月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch学习基础知识二相关的知识,希望对你有一定的参考价值。

PyTorch学习基础知识二

一、简介

这是PyTorch学习基础知识的第二篇内容,主要讲解一下神经网络的相关知识。

二、 神经网络概述

"""
神经网络知识

Sigmoid函数(具体的形式参见Sigmoid函数.jpg)


损失函数(Cross Entropy Loss)
(交叉熵损失函数(Cross Entropy Loss))
(具体的形式参见:交交叉熵损失函数0.jpg,叉熵损失函数1.jpg 以及 交叉熵损失函数2.jpg)


梯度下降(Gradient Descent)
(梯度下降原理)


计算图
每次迭代训练,神经网络模型主要分成两个步骤:
1、正向传播(Forward Propagation);
2、反向传播(Back Propagation)。
(正向传播就是计算损失函数过程,反向传播就是计算参数梯度过程。)

使用计算图可以对参数进行求导


(逻辑回归、损失函数、梯度下降和计算图)

"""












三、浅层神经网络概述

"""
NN
浅层神经网络NN(Neutral Network)

Input Layer
Hidden Layer
Output Layer

(参见单个神经元结构.jpg)
线性部分+非线性部分(非线性部分主要是激活函数,激活函数主要是Sigmoid函数)


1、激活函数(正向传播)


Sigmoid函数(Activation Function 激活函数中的一种)

除此之外,激活函数还可以是:
tanh函数(参见tanh函数.jpg)
RelU函数(参见RelU函数.jpg)
Leaky_ReLU函数(参见Leaky_ReLU函数.jpg)(其中可能有一个表达式不清楚,参见LeakyRelU表达式.jpg)
其中,λ 为可变参数,一般 λ∈(0,1),例如 λ=0.01


2、反向传播(神经网络反向传输)


损失函数(参见损失函数.jpg)
总体的流程参见正方向传输(NN).jpg

"""

"""

"""

四、神经网络的一个举例

这个案例,目前我没有完全搞明白,但是正在努力的学习中,放在这里供大家参考啦:

"""

自己动手写一个神经网络模型
(目前看的不是很懂........)

后续还需要进一步看看这个东西的,后续再学习自己搭建啦。

"""


import numpy as np
import matplotlib.pyplot as plt

# %matplotlib inline

r = np.random.randn(200)*0.8
x1 = np.linspace(-3, 1, 200)
x2 = np.linspace(-1, 3, 200)
y1 = x1*x1 + 2*x1 - 2 + r
y2 = -x2*x2 + 2*x2 + 2 + r

X = np.hstack(([x1, y1], [x2, y2]))                     # 输入样本 X,维度:2 x 400
Y = np.hstack((np.zeros((1, 200)), np.ones((1, 200))))    # 输出标签 Y

plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral)
# plt.show()


m = X.shape[1]      # 样本个数
n_x = X.shape[0]    # 输入层神经元个数
n_h = 3             # 隐藏层神经元个数
n_y = Y.shape[0]    # 输出层神经元个数


W1 = np.random.randn(n_h,n_x)*0.01
b1 = np.zeros((n_h,1))
W2 = np.random.randn(n_y,n_h)*0.01
b2 = np.zeros((n_y,1))


assert (W1.shape == (n_h, n_x))
assert (b1.shape == (n_h, 1))
assert (W2.shape == (n_y, n_h))
assert (b2.shape == (n_y, 1))

parameters = "W1": W1,
              "b1": b1,
              "W2": W2,
              "b2": b2

def sigmoid(x):
    """
    Compute the sigmoid of x
    """
    s = 1/(1+np.exp(-x))
    return s

def forward_propagation(X, parameters):

    W1 = parameters["W1"]
    b1 = parameters["b1"]
    W2 = parameters["W2"]
    b2 = parameters["b2"]

    Z1 = np.dot(W1,X) + b1
    A1 = np.tanh(Z1)
    Z2 = np.dot(W2,A1) + b2
    A2 = sigmoid(Z2)

    assert(A2.shape == (1, X.shape[1]))

    cache = "Z1": Z1,
             "A1": A1,
             "Z2": Z2,
             "A2": A2

    return A2, cache


def compute_cost(A2, Y, parameters):

    m = Y.shape[1] # number of example

    # 计算交叉熵损失函数
    logprobs = np.multiply(np.log(A2),Y)+np.multiply(np.log(1-A2),(1-Y))
    cost = - 1/m * np.sum(logprobs)

    cost = np.squeeze(cost)

    return cost


def backward_propagation(parameters, cache, X, Y):

    m = X.shape[1]

    W1 = parameters["W1"]
    W2 = parameters["W2"]

    A1 = cache["A1"]
    A2 = cache["A2"]

    # 反向求导
    dZ2 = A2 - Y
    dW2 = 1/m*np.dot(dZ2,A1.T)
    db2 = 1/m*np.sum(dZ2,axis=1,keepdims=True)
    dZ1 = np.dot(W2.T,dZ2)*(1 - np.power(A1, 2))
    dW1 = 1/m*np.dot(dZ1,X.T)
    db1 = 1/m*np.sum(dZ1,axis=1,keepdims=True)

    # 存储各个梯度值
    grads = "dW1": dW1,
             "db1": db1,
             "dW2": dW2,
             "db2": db2

    return grads


def update_parameters(parameters, grads, learning_rate = 0.1):

    W1 = parameters["W1"]
    b1 = parameters["b1"]
    W2 = parameters["W2"]
    b2 = parameters["b2"]

    dW1 = grads["dW1"]
    db1 = grads["db1"]
    dW2 = grads["dW2"]
    db2 = grads["db2"]

    W1 = W1 - learning_rate*dW1
    b1 = b1 - learning_rate*db1
    W2 = W2 - learning_rate*dW2
    b2 = b2 - learning_rate*db2

    parameters = "W1": W1,
                  "b1": b1,
                  "W2": W2,
                  "b2": b2

    return parameters


def nn_model(X, Y, n_h = 3, num_iterations = 10000, print_cost=False):

    m = X.shape[1]      # 样本个数
    n_x = X.shape[0]    # 输入层神经元个数
    n_y = Y.shape[0]    # 输出层神经元个数

    W1 = np.random.randn(n_h,n_x)*0.01
    b1 = np.zeros((n_h,1))
    W2 = np.random.randn(n_y,n_h)*0.01
    b2 = np.zeros((n_y,1))

    parameters = "W1": W1,
                  "b1": b1,
                  "W2": W2,
                  "b2": b2

    # 迭代训练
    J = []     # 存储损失函数
    for i in range(0, num_iterations):

        A2, cache = forward_propagation(X, parameters)            # 正向传播
        cost = compute_cost(A2, Y, parameters)                    # 计算损失函数
        grads = backward_propagation(parameters, cache, X, Y)     # 反向传播
        parameters = update_parameters(parameters, grads)         # 更新权重
        J.append(cost)

        # 每隔 1000 次训练,打印 cost
        if print_cost and i % 1000 == 0:
            print ("Cost after iteration %i: %f" %(i, cost))

    return parameters


parameters = nn_model(X, Y, n_h = 3, num_iterations = 10000, print_cost=True)


def predict(parameters, X):

    A2, cache = forward_propagation(X, parameters)
    predictions = A2 > 0.5

    return predictions
y_pred = predict(parameters,X)
accuracy = np.mean(y_pred == Y)
print(accuracy)

def plot_decision_boundary(model, X, y):

    x_min, x_max = X[0, :].min() - 1, X[0, :].max() + 1
    y_min, y_max = X[1, :].min() - 1, X[1, :].max() + 1
    h = 0.01

    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

    Z = model(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
    plt.ylabel('x2')
    plt.xlabel('x1')
    plt.scatter(X[0, :], X[1, :], c=y, cmap=plt.cm.Spectral)


plot_decision_boundary(lambda x: predict(parameters, x.T), X, Y)
plt.title("Decision Boundary, hidden layers = 5")


plt.show()

"""

 "cells": [
  
   "cell_type": "markdown",
   "metadata": ,
   "source": [
    "### 构造原始数据"
   ]
  ,
  
   "cell_type": "code",
   "execution_count": 466,
   "metadata": ,
   "outputs": [],
   "source": [
    "import numpy as np\\n",
    "import matplotlib.pyplot as plt\\n",
    "\\n",
    "%matplotlib inline\\n",
    "\\n",
    "r = np.random.randn(200)*0.8\\n",
    "x1 = np.linspace(-3, 1, 200)\\n",
    "x2 = np.linspace(-1, 3, 200)\\n",
    "y1 = x1*x1 + 2*x1 - 2 + r\\n",
    "y2 = -x2*x2 + 2*x2 + 2 + r\\n",
    "\\n",
    "X = np.hstack(([x1, y1],[x2, y2]))                     # 输入样本 X,维度:2 x 400\\n",
    "Y = np.hstack((np.zeros((1,200)),np.ones((1,200))))    # 输出标签 Y"
   ]
  ,
  
   "cell_type": "code",
   "execution_count": 467,
   "metadata": ,
   "outputs": [
    
     "data": 
      "image/png": "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

以上是关于PyTorch学习基础知识二的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch学习基础知识一

深度学习——Pytorch基础

深度学习——Pytorch基础

我是土堆 - Pytorch教程 知识点 学习总结笔记

PyTorch学习笔记:PyTorch生态简介

Pytorch模型训练实用教程学习笔记:二模型的构建