Kaggle——Deep Learning(使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络)

1.单个神经元

创建一个具有1个线性单元的网络

复制代码
#线性单元
from tensorflow import keras
from tensorflow.keras import layers
#创建一个具有1个线性单元的网络
model=keras.Sequential([
    layers.Dense(units=1,input_shape=[3])
])

2.深度神经网络

构建序列模型

复制代码
#构建序列模型
from tensorflow import keras
from tensorflow.keras import layers
model=keras.Sequential([
    #隐藏的 ReLU 层
    layers.Dense(unit=4,activation='relu',input_shape=[2]),
    layers.Dense(unit=3,activation='relu'),
    #线性输出层
    layers.Dense(units=1),
])

重写代码以使用激活层

复制代码
#重写代码以使用激活层
model = keras.Sequential([
    layers.Dense(units=32, input_shape=[8]),
    layers.Activation('relu'),
    layers.Dense(units=32),
    layers.Activation('relu'),
    layers.Dense(1),
])

3.梯度下降

深度学习中使用的几乎所有优化算法都属于随机梯度下降算法。它们是分步训练网络的迭代算法。训练的一个步骤如下:抽取一些训练数据,并通过网络运行以进行预测。测量预测值与真实值之间的损失。最后,朝着使损失更小的方向调整权重。

一个"损失函数",用于衡量网络预测的好坏。

一个"优化器",可以告诉网络如何改变其权重。

复制代码
#随机梯度下降
#一个"损失函数",用于衡量网络预测的好坏。
#一个"优化器",可以告诉网络如何改变其权重
#添加损失和优化器¶
#定义模型后,可以使用模型的编译方法添加损失函数和优化器:
model.compile(
    optimizer="adam",
    loss="mae",
)

开始训练:告诉 Keras 每次向优化器提供 256 行训练数据(batch_size),并在整个数据集中执行 10 次。

复制代码
#开始训练:告诉 Keras 每次向优化器提供 256 行训练数据(batch_size),并在整个数据集中执行10次(epoch)。
history=model.fit(
    X_train,y_train,
    validation_data=(X_vaild,y_vaild),
    batch_size=256,
    epochs=10,
)

用图表的形式查看损失

复制代码
#用图表的形式查看损失
import pandas as pd
#将训练历史转换为数据框
history_df=pd.DataFrame(history.history)
#使用 Pandas 原生的 plot 方法
history_df['loss'].plot();

4.过拟合和欠拟合

使网络更深(添加更多层)来增加网络的容量。

更宽的网络更容易学习更多的线性关系,而更深的网络则更倾向于非线性关系。

复制代码
#过拟合和欠拟合
#使网络更深(添加更多层)来增加网络的容量。
#更宽的网络更容易学习更多的线性关系,而更深的网络则更倾向于非线性关系。
model = keras.Sequential([
    layers.Dense(16, activation='relu'),
    layers.Dense(1),
])

wider = keras.Sequential([
    layers.Dense(32, activation='relu'),
    layers.Dense(1),
])

deeper = keras.Sequential([
    layers.Dense(16, activation='relu'),
    layers.Dense(16, activation='relu'),
    layers.Dense(1),
])

当模型过于热衷于学习噪声时,验证损失可能会在训练期间开始增加。

为了防止这种情况,我们可以在验证损失似乎不再减少时停止训练。

以这种方式中断训练称为提前停止。

复制代码
#模型过于热衷于学习噪声时,验证损失可能会在训练期间开始增加。
#为了防止这种情况,我们可以在验证损失似乎不再减少时停止训练。
#以这种方式中断训练称为提前停止。
from tensorflow.keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(
    #视为改进的最小变化量
    min_delta=0.001, 
    #停止前要等待多少个 epoch
    patience=20, 
    restore_best_weights=True,
)

5. Dropout和批量标准化

添加 Dropout正则化

复制代码
#添加 Dropout正则化
keras.Sequential([
    # ...
    #将 30% 的 dropout 应用到下一层
    layers.Dropout(rate=0.3), 
    layers.Dense(16),
    # ...
])

添加批量标准化

复制代码
#添加批量标准化
layers.Dense(16, activation='relu'),
layers.BatchNormalization(),

#或者
layers.Dense(16),
layers.BatchNormalization(),
layers.Activation('relu'),

Droupout和批量标准化

复制代码
#Droupout和批量标准化
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
    layers.Dense(1024, activation='relu', input_shape=[11]),
    layers.Dropout(0.3),
    layers.BatchNormalization(),
    layers.Dense(1024, activation='relu'),
    layers.Dropout(0.3),
    layers.BatchNormalization(),
    layers.Dense(1024, activation='relu'),
    layers.Dropout(0.3),
    layers.BatchNormalization(),
    layers.Dense(1),
])

6.二分类

复制代码
#二分类
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
    layers.Dense(4, activation='relu', input_shape=[33]),
    layers.Dense(4, activation='relu'),    
    layers.Dense(1, activation='sigmoid'),
])

将交叉熵损失和准确度指标添加到模型中

复制代码
#将交叉熵损失和准确度指标添加到模型中
model.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['binary_accuracy'],
)

这个特定问题中的模型可能需要相当多的时期才能完成训练,因此我们将包含一个早期停止回调以方便使用。

复制代码
#这个特定问题中的模型可能需要相当多的时期才能完成训练,
#因此我们将包含一个早期停止回调以方便使用。
early_stopping = keras.callbacks.EarlyStopping(
    patience=10,
    min_delta=0.001,
    restore_best_weights=True,
)
相关推荐
yzx99101320 分钟前
Python开发系统项目
人工智能·python·深度学习·django
my_q2 小时前
机器学习与深度学习08-随机森林02
深度学习·随机森林·机器学习
不爱吃山楂罐头3 小时前
第三十三天打卡复习
python·深度学习
m0_678693333 小时前
深度学习笔记25-RNN心脏病预测(Pytorch)
笔记·rnn·深度学习
蹦蹦跳跳真可爱5894 小时前
Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
人工智能·python·深度学习·神经网络·目标检测·计算机视觉
LeonDL1684 小时前
HALCON 深度学习训练 3D 图像的几种方式优缺点
人工智能·python·深度学习·3d·halcon·halcon训练3d图像·深度学习训练3d图像
只有左边一个小酒窝6 小时前
(三)动手学线性神经网络:从数学原理到代码实现
人工智能·深度学习·神经网络
数据与后端架构提升之路8 小时前
深度学习学习率调度器指南:PyTorch 四大 scheduler 对决
人工智能·pytorch·深度学习·调度器
越轨8 小时前
【Pytorch学习笔记】模型模块08——AlexNet模型详解
人工智能·pytorch·笔记·深度学习·学习·机器学习
1296004528 小时前
简单transformer运用
人工智能·深度学习·transformer