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,
)
相关推荐
lisw054 小时前
DeepSeek原生稀疏注意力(Native Sparse Attention, NSA)算法介绍
人工智能·深度学习·算法
美狐美颜sdk8 小时前
美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?
android·深度学习·ios·美颜sdk·第三方美颜sdk·视频美颜sdk
HABuo8 小时前
【YOLOv8】YOLOv8改进系列(11)----替换主干网络之MobileNetV4
人工智能·深度学习·yolo·目标检测·计算机视觉
Kai HVZ9 小时前
《深度学习》——bert框架
人工智能·深度学习·bert
紫雾凌寒9 小时前
自然语言处理|金融舆情解析:智能事件抽取与风险预警之道
人工智能·深度学习·自然语言处理·金融·事件抽取·金融舆情·风险预警
进取星辰10 小时前
PyTorch 深度学习实战(30):模型压缩与量化部署
人工智能·pytorch·深度学习
小白的高手之路11 小时前
常用的卷积神经网络及Pytorch示例实现
人工智能·pytorch·python·深度学习·神经网络·cnn
神经星星12 小时前
在线教程丨YOLO系列重要创新!清华团队发布YOLOE,直击开放场景物体实时检测与分割
人工智能·深度学习·机器学习
卑微小文12 小时前
惊!代理 IP 助力股海菜鸟变身赛场冠军!
爬虫·深度学习·数据分析
Json_13 小时前
Vue 初识Hello word
前端·vue.js·深度学习