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,
)
相关推荐
麦麦大数据1 天前
F024 RNN+Vue+Flask电影推荐可视化系统 python flask mysql 深度学习 echarts
python·rnn·深度学习·vue·echarts·电影推荐
诸葛箫声1 天前
十类图片深度学习提升准确率(0.9317)
人工智能·深度学习
wan5555cn1 天前
当代社会情绪分类及其改善方向深度解析
大数据·人工智能·笔记·深度学习·算法·生活
nju_spy1 天前
华为AI岗 -- 笔试(一)
人工智能·深度学习·机器学习·华为·笔试·dbscan·掩码多头自注意力
初学小刘1 天前
深度学习在目标检测中的应用与挑战
人工智能·深度学习·目标检测
MYX_3091 天前
第四章 神经网络的基本组件
pytorch·深度学习·神经网络·学习
OpenBayes1 天前
教程上新|重新定义下一代 OCR:IBM 最新开源 Granite-docling-258M,实现端到端的「结构+内容」统一理解
人工智能·深度学习·机器学习·自然语言处理·ocr·图像识别·文档处理
武子康1 天前
AI-调查研究-105-具身智能 机器人学习数据采集:从示范视频到状态-动作对的流程解析
人工智能·深度学习·机器学习·ai·系统架构·机器人·具身智能
java1234_小锋1 天前
TensorFlow2 Python深度学习 - 使用TensorBoard可视化数据
python·深度学习·tensorflow·tensorflow2
hudawei9961 天前
机器学习,深度学习,神经网络,Transformer的关系
深度学习·神经网络·机器学习