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

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换,可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。

1. 数据准备与预处理

2. 构建模型

3. 编译模型

4. 训练模型

5. 评估模型

6. 模型应用与预测

7. 保存与加载模型

8. 完整代码


1. 数据准备与预处理

你提供了摄氏度和华氏度的数据,并进行了标准化。标准化是为了使数据适应神经网络的训练,因为标准化可以加快训练过程并提高模型性能。

import numpy as np
import tensorflow as tf# 温度数据:摄氏度到华氏度的转换
celsius = np.array([-50,-40, -10, 0, 8, 22, 35, 45, 55, 65, 75, 95], dtype=float)
fahrenheit = np.array([-58.0,-40.0,14.0,32.0,46.4,71.6,95.0,113.0,131.0,149.0,167.0,203.0], dtype=float)# 数据标准化:计算均值和标准差
celsius_mean = np.mean(celsius)
celsius_std = np.std(celsius)fahrenheit_mean = np.mean(fahrenheit)
fahrenheit_std = np.std(fahrenheit)# 标准化输入和输出数据
celsius_normalized = (celsius - celsius_mean) / celsius_std
fahrenheit_normalized = (fahrenheit - fahrenheit_mean) / fahrenheit_std

2. 构建模型

在构建模型时,使用了一个简单的神经网络结构。神经网络包含了一个隐藏层和一个输出层。隐藏层使用了ReLU激活函数,输出层使用了线性激活函数,适合回归任务。

# 创建模型
model = tf.keras.Sequential([# 隐藏层,增加神经元数量,激活函数使用 ReLUtf.keras.layers.Dense(16, input_dim=1, activation='relu'),# 输出层,线性激活函数用于回归任务tf.keras.layers.Dense(1, activation='linear')
])

3. 编译模型

选择了Adam优化器,它在处理回归任务时表现较好,损失函数使用均方误差(MSE),这是回归问题中常用的损失函数。

# 编译模型,使用 Adam 优化器和均方误差损失函数
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mean_squared_error')

4. 训练模型

模型通过 fit() 方法进行训练,设置训练轮数(epochs)为5000轮。根据数据的复杂性和模型的表现,增加训练轮数可以帮助模型更好地收敛。

# 训练模型,设置训练轮数(epochs)增加到5000
model.fit(celsius_normalized, fahrenheit_normalized, epochs=5000)

5. 评估模型

训练完成后,你可以对模型进行评估。这里使用了一个测试集(test_celsius),并通过预测得到标准化的结果,然后将其恢复为原始的华氏度值。

# 测试模型
test_celsius = np.array([0, 20, 100], dtype=float)
test_celsius_normalized = (test_celsius - celsius_mean) / celsius_std
predictions_normalized = model.predict(test_celsius_normalized)# 将预测结果从标准化值恢复到原始华氏度范围
predictions = predictions_normalized * fahrenheit_std + fahrenheit_mean

6. 模型应用与预测

最后,你可以输出预测的华氏度值。模型会对每个输入的摄氏度值返回预测的华氏度

# 输出预测结果
print("预测华氏度:")
for c, f in zip(test_celsius, predictions):print(f"{c} 摄氏度 => {f[0]} 华氏度")

7. 保存与加载模型

保存模型可以让你在之后加载并进行预测而不需要重新训练。在TensorFlow中,你可以使用 model.save() 来保存模型,使用 tf.keras.models.load_model() 来加载模型。

# 保存模型
model.save('temperature_conversion_model.h5')# 加载模型
loaded_model = tf.keras.models.load_model('temperature_conversion_model.h5')

8. 完整代码

最终的完整代码如下:

import numpy as np
import tensorflow as tf# 温度数据:摄氏度到华氏度的转换
celsius = np.array([-50,-40, -10, 0, 8, 22, 35, 45, 55, 65, 75, 95], dtype=float)
fahrenheit = np.array([-58.0,-40.0,14.0,32.0,46.4,71.6,95.0,113.0,131.0,149.0,167.0,203.0], dtype=float)# 数据标准化:计算均值和标准差
celsius_mean = np.mean(celsius)
celsius_std = np.std(celsius)fahrenheit_mean = np.mean(fahrenheit)
fahrenheit_std = np.std(fahrenheit)# 标准化输入和输出数据
celsius_normalized = (celsius - celsius_mean) / celsius_std
fahrenheit_normalized = (fahrenheit - fahrenheit_mean) / fahrenheit_std# 创建模型
model = tf.keras.Sequential([# 隐藏层,增加神经元数量,激活函数使用 ReLUtf.keras.layers.Dense(16, input_dim=1, activation='relu'),# 输出层,线性激活函数用于回归任务tf.keras.layers.Dense(1, activation='linear')
])# 编译模型,使用 Adam 优化器和均方误差损失函数
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mean_squared_error')# 训练模型,设置训练轮数(epochs)增加到5000
model.fit(celsius_normalized, fahrenheit_normalized, epochs=5000)# 测试模型
test_celsius = np.array([0, 20, 100], dtype=float)
test_celsius_normalized = (test_celsius - celsius_mean) / celsius_std
predictions_normalized = model.predict(test_celsius_normalized)# 将预测结果从标准化值恢复到原始华氏度范围
predictions = predictions_normalized * fahrenheit_std + fahrenheit_mean# 输出预测结果
print("预测华氏度:")
for c, f in zip(test_celsius, predictions):print(f"{c} 摄氏度 => {f[0]} 华氏度")# 保存模型
model.save('temperature_conversion_model.h5')# 加载模型
loaded_model = tf.keras.models.load_model('temperature_conversion_model.h5')

http://www.lryc.cn/news/530661.html

相关文章:

  • 7.DP算法
  • Baklib构建高效协同的基于云的内容中台解决方案
  • 在C语言多线程环境中使用互斥量
  • 项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser
  • 代码随想录刷题笔记
  • AI智慧社区--人脸识别
  • 对象的实例化、内存布局与访问定位
  • React基础知识回顾详解
  • 开发第一个安卓页面
  • 物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】
  • 微服务-配置管理
  • 基于SpringBoot的智慧康老疗养院管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 100.1 AI量化面试题:解释夏普比率(Sharpe Ratio)的计算方法及其在投资组合管理中的应用,并说明其局限性
  • LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略
  • 深度解析:网站快速收录与网站安全性的关系
  • 【Rust自学】16.2. 使用消息传递来跨线程传递数据
  • 如何实现滑动网格的功能
  • 使用C# 如何获取本机连接的WIFI名称[C# ---1]
  • 【Docker】快速部署 Nacos 注册中心
  • OpenCV:闭运算
  • Python | Pytorch | Tensor知识点总结
  • aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk
  • 《OpenCV》——图像透视转换
  • 9 点结构模块(point.rs)
  • Java线程认识和Object的一些方法ObjectMonitor
  • 【高等数学】贝塞尔函数
  • 99.20 金融难点通俗解释:中药配方比喻马科维茨资产组合模型(MPT)
  • 实现使用K210单片机进行猫脸检测,并在检测到猫脸覆盖屏幕50%以上时执行特定操作
  • 小程序设计和开发:如何研究同类型小程序的优点和不足。
  • tiktok 国际版抖抖♬♬ X-Bogus参数算法逆向分析