Day 18:Keras深度学习框架入门

Day 18:Keras深度学习框架入门

📋 目录

  1. Keras/TensorFlow概述
  2. 神经网络核心组件
  3. 模型搭建的两种方式
  4. 编译与训练
  5. 回调函数详解
  6. 过拟合与正则化

第一部分:Keras/TensorFlow概述(1.5小时理论)

1.1 什么是Keras?

Keras 是一个高级神经网络API,最初由François Chollet开发,现在作为TensorFlow的官方高级API。

设计哲学

  • 用户友好:简单一致的API
  • 模块化:独立配置的组件
  • 可扩展性:易于添加自定义模块
  • 多后端支持:TensorFlow, Theano, CNTK

1.2 TensorFlow简介

TensorFlow 是Google开发的端到端机器学习平台。

核心概念

  • Tensor(张量):多维数组
  • 计算图:定义计算流程
  • 自动微分:自动计算梯度

1.3 Keras vs PyTorch vs Scikit-learn

对比项 Keras/TF PyTorch Scikit-learn
抽象层级 高级 低级/中级 高级
易用性 ★★★★★ ★★★☆☆ ★★★★★
灵活性 ★★★★☆ ★★★★★ ★★☆☆☆
调试难度 简单 中等 简单
适用场景 标准深度学习 研究、自定义模型 传统ML、小规模DL

第二部分:神经网络核心组件

2.1 层(Layer)

层是神经网络的基本构建块。

python 复制代码
# 全连接层
Dense(units=64, activation='relu', input_shape=(input_dim,))

# 激活层
Activation('relu')

# Dropout层
Dropout(rate=0.5)

# 输入层
Input(shape=(input_dim,))

2.2 激活函数

python 复制代码
# 常用激活函数
activation='relu'      # 隐藏层默认选择
activation='sigmoid'   # 二分类输出层
activation='softmax'   # 多分类输出层
activation='tanh'      # 传统选择
activation='linear'    # 回归输出层

2.3 损失函数

python 复制代码
# 二分类
loss='binary_crossentropy'

# 多分类
loss='categorical_crossentropy'
loss='sparse_categorical_crossentropy'  # 标签为整数时

# 回归
loss='mse'           # 均方误差
loss='mae'           # 平均绝对误差
loss='huber'         # Huber损失

2.4 优化器

python 复制代码
# Adam(默认首选)
optimizer='adam'
optimizer=Adam(learning_rate=0.001)

# SGD
optimizer=SGD(learning_rate=0.01, momentum=0.9)

# RMSprop
optimizer=RMSprop(learning_rate=0.001)

2.5 评估指标

python 复制代码
# 分类任务
metrics=['accuracy']
metrics=['accuracy', 'precision', 'recall']

# 回归任务
metrics=['mae', 'mse']

第三部分:模型搭建的两种方式

3.1 Sequential API(序列式)

适用于简单的前馈网络。

python 复制代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

model = Sequential([
    Dense(128, activation='relu', input_shape=(input_dim,)),
    Dropout(0.3),
    Dense(64, activation='relu'),
    Dropout(0.3),
    Dense(1, activation='sigmoid')
])

3.2 Functional API(函数式)

适用于复杂网络(多输入、多输出、共享层)。

python 复制代码
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

inputs = Input(shape=(input_dim,))
x = Dense(128, activation='relu')(inputs)
x = Dropout(0.3)(x)
x = Dense(64, activation='relu')(x)
outputs = Dense(1, activation='sigmoid')(x)

model = Model(inputs=inputs, outputs=outputs)

3.3 两种方式对比

方面 Sequential Functional
代码简洁度 ★★★★★ ★★★☆☆
灵活性 ★★☆☆☆ ★★★★★
适用场景 简单线性堆叠 复杂拓扑结构
多输入 不支持 支持
多输出 不支持 支持
共享层 不支持 支持

第四部分:编译与训练

4.1 编译(compile)

配置学习过程。

python 复制代码
model.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['accuracy']
)

4.2 训练(fit)

python 复制代码
history = model.fit(
    x_train, y_train,
    epochs=100,
    batch_size=32,
    validation_split=0.2,          # 从训练集划分验证集
    validation_data=(x_val, y_val), # 直接指定验证集
    callbacks=[early_stopping],     # 回调函数
    verbose=1                       # 输出详细程度
)

4.3 超参数说明

参数 说明 典型值
epochs 完整遍历训练集的次数 10-200
batch_size 每次更新使用的样本数 16, 32, 64, 128
validation_split 从训练集划分验证集比例 0.1-0.2
shuffle 是否打乱数据 True

4.4 训练历史(History)

python 复制代码
# history.history 包含所有指标的每一轮值
loss_history = history.history['loss']
val_loss_history = history.history['val_loss']
accuracy_history = history.history['accuracy']

# 可视化
plt.plot(history.history['loss'], label='训练损失')
plt.plot(history.history['val_loss'], label='验证损失')

第五部分:回调函数(Callbacks)详解

5.1 回调函数概述

回调是在训练过程中特定时刻执行的函数。

python 复制代码
from tensorflow.keras.callbacks import (
    EarlyStopping, ModelCheckpoint, ReduceLROnPlateau,
    TensorBoard, CSVLogger
)

5.2 EarlyStopping(早停)

作用:验证集性能不再提升时停止训练。

python 复制代码
early_stopping = EarlyStopping(
    monitor='val_loss',      # 监控指标
    patience=10,             # 连续多少轮不提升则停止
    min_delta=1e-4,         # 最小变化阈值
    restore_best_weights=True # 恢复最佳权重
)

5.3 ModelCheckpoint(模型保存)

作用:保存训练过程中的最佳模型。

python 复制代码
checkpoint = ModelCheckpoint(
    'best_model.h5',
    monitor='val_accuracy',
    save_best_only=True,
    save_weights_only=False,
    mode='max'  # 'max'表示越大越好,'min'表示越小越好
)

5.4 ReduceLROnPlateau(学习率衰减)

作用:验证集性能停滞时降低学习率。

python 复制代码
reduce_lr = ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.5,          # 学习率乘以因子
    patience=5,          # 等待轮数
    min_lr=1e-6         # 最小学习率
)

5.5 CSVLogger(日志记录)

python 复制代码
csv_logger = CSVLogger('training_log.csv', append=True)

5.6 TensorBoard(可视化)

python 复制代码
tensorboard = TensorBoard(log_dir='./logs')

第六部分:过拟合与正则化

6.1 Dropout层

原理:训练时随机丢弃一定比例的神经元,防止共适应。

python 复制代码
# 添加Dropout层
model.add(Dropout(rate=0.5))  # 50%的神经元被丢弃

# Dropout率建议
# 输入层: 0.1-0.2
# 隐藏层: 0.3-0.5
# 输出层: 0(不建议)

6.2 L1/L2正则化

python 复制代码
from tensorflow.keras.regularizers import l1, l2, l1_l2

# L2正则化
Dense(64, activation='relu', kernel_regularizer=l2(0.01))

# L1正则化
Dense(64, activation='relu', kernel_regularizer=l1(0.01))

# L1+L2
Dense(64, activation='relu', kernel_regularizer=l1_l2(l1=0.01, l2=0.01))

6.3 Batch Normalization

作用:层间标准化,稳定训练。

python 复制代码
from tensorflow.keras.layers import BatchNormalization

model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))
相关推荐
一行代码一行诗++3 小时前
C语言中if的使用
c语言·c++·算法
sheji1053 小时前
AI桌面机器人市场分析报告
人工智能·机器人·智能硬件
AI科技星3 小时前
《基于 1 的 N 维分形与对称统一理论》
人工智能·算法·机器学习·数学建模·数据挖掘
计育韬3 小时前
Prezi+AI创意玩法:无限手绘地图图解演示文稿
人工智能·新媒体运营·微信公众平台
我的世界洛天依3 小时前
【VFrame・云瑶 R1 国语声库公测】RVC1006Nvidia 训练全记录|私人闭源虚拟歌手养成
人工智能·电脑
AI医影跨模态组学3 小时前
如何将影像组学特征与非小细胞肺癌脑转移瘤免疫微环境中的干扰素通路及CD8+ T细胞浸润建立关联,并解释与预后、免疫治疗响应的机制联系
人工智能·论文·医学·医学影像·影像组学·医学科研
qq_411262423 小时前
基于 ESP32-S3 + VB6824 的四博 A1 AI 智能拍学机方案:事件驱动架构、拍照识别与语音交互实现
人工智能·智能音箱
ting94520003 小时前
动手学深度学习(PyTorch版)深度详解(6):现代卷积神经网络-从经典模型到图像分类实战
人工智能·分类·cnn
wljy13 小时前
牛客每日一题(2026.4.30) 整数域二分
c语言·c++·算法·蓝桥杯·二分