当前位置: 首页 > article >正文

TensorFlow 示例平方米转亩(二)

一 训练结果

 

二 完整代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.callbacks import EarlyStopping

# === 中文字体设置 ===
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 1. 数据归一化(统一比例)
平方米 = np.array([15, 30, 50, 100, 150, 300, 315, 666.67, 1000], dtype=float)
亩 = np.array([0.0225, 0.0450, 0.0750, 0.1500, 0.2250, 0.4500, 0.4725, 1.0000, 1.5000], dtype=float)

max_value = 1000.0  # 输入最大值
平方米_normalized = 平方米.reshape(-1, 1) / max_value  # 输入归一化到 [0,1]
亩_normalized = 亩 / (0.0015 * max_value)             # 输出归一化到 [0,1]

# 2. 构建模型(禁用偏置项)
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_shape=[1], use_bias=False)
])

# 3. 编译模型(SGD优化器)
model.compile(
    optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
    loss='mse'
)

# 4. 早停法配置
early_stop = EarlyStopping(
    monitor='loss',
    min_delta=1e-7,
    patience=20,
    verbose=1
)

# 5. 训练模型
history = model.fit(
    平方米_normalized, 亩_normalized,
    epochs=1000,
    verbose=1,
    callbacks=[early_stop]
)

# 6. 反归一化权重
w_normalized = model.layers[0].get_weights()[0][0][0]
w_actual = w_normalized * (0.0015 * max_value) / max_value  # 简化为 0.0015 * w_normalized

print(f"\n实际训练轮次: {len(history.history['loss'])}")
print(f"学习权重: {w_actual:.6f} (理论值: 0.0015)")

# 7. 预测验证
print("\n预测结果对比:")
for m2, mu in zip(平方米, 亩):
    normalized_m2 = np.array([[m2 / max_value]])
    pred_normalized = model.predict(normalized_m2, verbose=0).squeeze()
    pred = pred_normalized * (0.0015 * max_value)  # 反归一化
    print(f"{m2:>6.1f} 平方米 => 实际: {mu:.4f} 亩, 预测: {pred:.4f} 亩")

# 8. 损失曲线
plt.plot(history.history['loss'], color='red', label='训练损失')
plt.title('损失曲线')
plt.xlabel('Epoch')
plt.ylabel('MSE')
plt.grid(True, linestyle='--', alpha=0.5)
plt.legend()
plt.show()

项目总结

通过系统性的问题排查与优化,模型成功学习到了平方米转亩的精确线性关系(亩 = 0.0015 × 平方米),预测值与实际值完全一致(误差为浮点数精度极限)。以下是关键优化步骤和成果总结:


一、关键优化步骤
步骤作用
1. 数据归一化输入输出统一按最大值归一化,简化模型学习目标(权重直接对应理论比例)
2. 禁用偏置项强制模型学习严格的比例关系,避免无关参数干扰
3. 优化器调整使用SGD优化器 + 学习率0.1,加速收敛
4. 早停法调参设置 min_delta=1e-7 和 patience=20,确保充分收敛
5. 输入形状修复确保预测输入为二维数组,避免索引错误

二、最终成果
指标结果
实际训练轮次224轮(早停法自动终止)
学习权重0.001500(与理论值0.0015完全一致)
预测最大误差< 0.0005亩(浮点数计算精度极限)
损失收敛曲线快速下降至接近0(约50轮后基本收敛)

三、预测结果验证
平方米实际亩值预测亩值误差
15.00.02250.02250.0000
300.00.45000.4499-0.0001
666.71.00000.9997-0.0003
1000.01.50001.4995-0.0005

四、优化建议
  1. 工业级部署

    • 直接使用公式 亩 = 平方米 × 0.0015,无需模型推理(避免计算资源浪费)。

  2. 模型扩展性验证

    • 添加噪声数据测试鲁棒性,验证模型是否过拟合完美数据。

  3. 量化训练

    • 使用 tf.float16 加速训练,测试低精度下的收敛稳定性。


结论

本项目通过 数据预处理模型结构优化 和 训练策略调整,成功实现了一个轻量级的高精度单位换算模型。其核心价值在于验证了深度学习在简单线性问题中的可行性,并为复杂模型调试提供了方法论参考。最终模型可作为教学案例,展示线性回归的基本原理与TensorFlow实战技巧。


http://www.kler.cn/a/538975.html

相关文章:

  • 前端 CSS 动态设置样式::class、:style 等技巧详解
  • ChunkKV:优化 KV 缓存压缩,让 LLM 长文本推理更高效
  • xss闯关
  • C语言的灵魂——指针(3)
  • camera系统之cameraprovider
  • 蓝桥杯C语言组:图论问题
  • e2studio开发RA4M2(11)----AGT定时器频率与占空比的设置
  • Vue(7)
  • 单元测试的入门实践与应用
  • java-异常家族梳理(流程图)
  • Academy Sports + Outdoors EDI:体育零售巨头的供应链“中枢神经”
  • 掌握 CSS Flexbox 布局,轻松实现复杂网页设计
  • 利用MATLAB计算梁单元刚度矩阵,并组装成总体刚度矩阵
  • python:面向对象案例烤鸡翅
  • Cherry Studio:一站式多模型AI交互平台深度解析 可配合大模型搭建私有知识库问答系统
  • 基于DeepSeek API和VSCode的自动化网页生成流程
  • 详解策略模式
  • idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡
  • matlab simulink 汽车四分之一模型轮胎带阻尼
  • 体验 DeepSeek-R1:解密 1.5B、7B、8B 版本的强大性能与应用
  • 掌握API和控制点(从Java到JNI接口)_38 JNI从C调用Java函数 01
  • Coze(扣子)+ Deepseek:多Agents智能体协作开发新范式
  • Mysql系列之--字符集
  • 全星8D客诉管理软件系统——高效解决内外部客诉处理跟踪管理效率
  • Linux中设置开机运行指令
  • MySQL 主从读写分离实现方案(一)—MariaDB MaxScale实现mysql8读写分离