TansorFlow和Keras的入门教程

本文是TensorFlow和Keras的入门教程,介绍了人工神经网络的基础,包括深层神经网络、激活函数(如双曲正切函数和ReLU)、损失函数,以及如何用Python和Keras开发人工神经网络模型。文章还讨论了训练过程中的前向传播、反向传播和超参数调节,强调了激活函数在梯度下降中的重要性,并提供了使用TensorBoard分析学习曲线的方法。
摘要由CSDN通过智能技术生成

介绍

人工神经网络(ANNs)是机器学习技术的发展,是深度学习的核心。人工神经网络涉及以下概念:输入输出层、隐藏层、隐藏层的神经元、正向传播和反向传播。

简单地说,输入层是一组自变量,输出层代表最终的输出(因变量),隐藏层由神经元组成,神经元应用数学变换和激活函数。前向传播的具体形式以获得最终输出为目标,而反向传播则计算梯度下降来相应地更新参数。有关操作流程的更多信息,请参阅下面的文章。

https://towardsdatascience.com/introduction-to-artificial-neural-networks-for-beginners-2d92a2fb9984

深层神经网络

当一个ANN包含一个很深的隐藏层时,它被称为深度神经网络(DNN)。DNN具有多个权重和偏差项,每一个都需要训练。反向传播可以确定如何调整所有神经元的每个权重和每个偏差项,以减少误差,当网络收敛到最小误差之前该过程将重复。

算法步骤如下:

  • 得到训练和测试数据以训练和验证模型的输出。所有涉及相关性、离群值处理的统计假设必须加以处理。

  • 输入层由自变量及其各自的值组成。训练集分为多个batch,整个训练集训练完称为一个epoch,epoch越多,训练时间越长

  • 每个batch被传递到输入层,输入层将其发送到第一个隐藏层,计算该层中所有神经元的输出(对于每一个小批量),输出结果被传递到下一层,这个过程重复,直到我们得到最后一层的输出,即输出层,这就是前向传播。

  • 然后使用损失函数计算网络的输出误差,该函数将期望输出与网络的实际输出进行比较

  • 计算了每个参数对误差项的贡献

  • 该算法根据学习速率(反向传播)执行梯度下降来调整权重和参数,并且该过程会重复进行

重要的是需要随机初始化所有隐藏层的权重,否则训练将会失败。

例如,如果将所有权重和偏移初始化为零,则给定层中的所有神经元将完全相同,此时反向传播将以完全相同的方式影响它们,因此它们将保持相同,换句话说,尽管每层有数百个神经元,但你的模型将表现得好像每层只有一个神经元;相反,如果你随机初始化权重,你就打破了对称性,允许反向传播来训练不同的神经元

激活函数

激活函数是梯度下降的关键。梯度下降不能在平面上移动,因此有一个定义良好的非零导数是很重要的,这将使梯度下降在每一步都取得进展。Sigmoid通常用于logistic回归问题,同时也有其他流行的激活函数。

双曲正切函数

该函数是S形的,连续的,输出范围在-1到+1之间。在训练开始时,每一层的输出或多或少都以0为中心,因此有助于更快地收敛。

整流线性单元

对于小于0的输入,它是不可微的,而对于其他情况,它会输出良好的结果,更重要的是该函数具有更快的计算速度。该函数没有最大输出值,因此在梯度下降过程中可能出现的一些问题会得到了很好的处理。

为什么我们需要激活函数?

假设f(x)=2x+5和g(x)=3x-1,这两个输入项的权重是不同的。在链接这些函数时,我们得到的是,f(g(x))=2(3x-1)+5=6x+3,这又是一个线性方程。非线性的缺失表现为深层神经网络中等价于一个线性方程,这种情况下的复杂问题空间是无法处理的。

损失函数

在处理回归问题时,我们不需要为输出层使用任何激活函数。在训练回归问题时使用的损失函数是均方误差,然而,训练集中的异常值可以用平均绝对误差来处理。Huber损失也是基于回归的任务中广泛使用的误差函数。

当误差小于阈值t(大多为1)时,Huber损失是二次的,但当误差大于t时,Huber损失是线性的。与均方误差相比,Huber损失的线性部分使其对异常值不太敏感,并且二次部分比平均绝对误差更快地收敛和产生更精确的结果。

分类问题通常使用二分类交叉熵、多分类交叉熵或稀疏分类交叉熵。二分类交叉熵用于二分类,而多分类或稀疏分类交叉熵用于多类分类问题。你可以在下面的链接中找到有关损失函数的更多详细信息。

注:分类交叉熵用于因变量的one-hot表示,当标签作为整数提供时,使用稀疏分类交叉熵。

https://keras.io/api/losses/

用Python开发ANN

我们将使用Kaggle的信用数据开发一个在Jupyter Notebook中实现的欺诈检测模型,同样的也可以在google colab中实现。

数据集包含2013年9月欧洲持卡人通过信用卡进行的交易数据,此数据集显示两天内发生的交易,其中284807笔交易中有492宗欺诈。数据集高度不平衡,正类(欺诈)占所有交易的0.172%。

https://www.kaggle.com/mlg-ulb/creditcardfraud

import tensorflow as tf
print(tf.__version__)

import pandas as pd
import numpy as np

from sklearn.model_selection import train_test_split
import tensorflow as tf

from sklearn import preprocessing

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, BatchNormalization

from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score, f1_score, precision_recall_curve, auc

import matplotlib.pyplot as plt
from tensorflow.keras import optimizers

import seaborn as sns

from tensorflow import keras

import random as rn

import os
os.environ["CUDA_VISIBLE_DEVICES"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值