DL_Backpropagation_tips for DNN_Day 5

homework for classification

原课程是不让用sklearn写的.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report

x_train = pd.read_csv(r"C:\Users\dell\Desktop\机器学习\DL2020\data\hw2\data\X_train")
y_train = pd.read_csv(r"C:\Users\dell\Desktop\机器学习\DL2020\data\hw2\data\Y_train")

df_x = np.array(x_train.loc[:, :])  # 这样数据中就没有列标签了
df_y = np.array(y_train.loc[:, :])
df_x = df_x[:, 1:]  # 这样数据中就没有行标签和没用的id了
df_y = df_y[:, 1:]
# print(x_train.head(10))
# print(y_train.head(10))
# print(x_train.shape)
# print(y_train.shape)
# print(df_x[0:10, :]) 查看删干净了没有
# print(df_y[0:10, :])

std = StandardScaler()
std.fit_transform(df_x)

x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, test_size=0.25)

lr = LogisticRegression()
lr.fit(x_train, y_train)
y_predict = lr.predict(x_test)
score = lr.score(x_test, y_test)
print(score)
print("召回率:", classification_report(y_test, y_predict))

下面是损失函数和梯度下降函数

def _cross_entropy_loss(y_pred, Y_label):
    # This function computes the cross entropy.
    #
    # Arguements:
    #     y_pred: probabilistic predictions, float vector
    #     Y_label: ground truth labels, bool vector
    # Output:
    #     cross entropy, scalar
    cross_entropy = -np.dot(Y_label, np.log(y_pred)) - np.dot((1 - Y_label), np.log(1 - y_pred))
    return cross_entropy

def _gradient(X, Y_label, w, b):
    # This function computes the gradient of cross entropy loss with respect to weight w and bias b.
    y_pred = _f(X, w, b)
    pred_error = Y_label - y_pred
    w_grad = -np.sum(pred_error * X.T, 1)
    b_grad = -np.sum(pred_error)
    return w_grad, b_grad

Backpropagation

purpose

我们一开始的目的是求损失函数对变量w的梯度。
在这里插入图片描述
我们可以将这个偏微分看成计算下面两个式子

前面的是正向传播,后者是反向传播:
正向传播就是改路径的输入值。
而反向传播的计算需要一直往后推。
在这里插入图片描述

process

这是正向传播的求解过程
在这里插入图片描述
这是反向传播的求解过程
在这里插入图片描述
如果我们把反向传播看成倒着的正向传播话,也就是两个反向的输入值的乘积组成了损失函数对它w的微分。如下所示。
在这里插入图片描述

Tips for training DNN

Relu

一个代替Sigmoid的函数,可以解决gradient vanish的问题。也就是前面输入值的影响到面越来越小的问题。
在这里插入图片描述

Maxout

maxout 可以让神经网络自己学习核函数
Relu也可以用是maxout特殊形式的一种
在这里插入图片描述

Regularization

在这里插入图片描述

Drop out

drop out 是针对测试集结果差的情况,而不是训练集差就能用drop out 是集成算法的一种
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值