keras机器学习三种模型典型案例

1, MLP模型预测

使用Keras进行数据预测的详细代码案例,包括模型构建、训练和预测的步骤,以及参数的解释。我们将使用一个简单的全连接神经网络(也称为多层感知器,MLP)来进行回归任务。这个案例将使用Keras,它是TensorFlow的高级API,用于构建和训练深度学习模型。

1. 数据准备

假设我们有一组输入特征X和相应的目标值y。为了简化,我们将使用合成数据来演示。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 生成合成数据
np.random.seed(0)
X = np.linspace(0, 10, 100)[:, np.newaxis]
y = np.sin(X) + 0.1 * np.random.randn(100, 1)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

2. 模型构建

接下来,我们将构建一个简单的MLP模型。这个模型包含一个输入层、一个隐藏层和一个输出层。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 创建模型
model = Sequential()
# 添加输入层和第一个隐藏层
model.add(Dense(50, activation='relu', input_shape=(X_train.shape[1],)))
# 添加第二个隐藏层
model.add(Dense(20, activation='relu'))
# 添加输出层
model.add(Dense(1))
# 打印模型概要
model.summary()

3. 模型编译

在训练模型之前,我们需要编译它,指定损失函数、优化器和评估指标。

model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mean_absolute_error'])
  • optimizer: 这是模型用来调整权重的算法。adam是一个常用的优化器,它结合了两种优化算法的优点,适用于各种类型的数据。
  • loss: 这是模型用来衡量预测误差的函数。mean_squared_error是回归任务中常用的损失函数,它计算预测值和实际值之间差异的平方。
  • metrics: 这是模型评估的指标。mean_absolute_error是另一个常用的回归指标,它计算预测值和实际值之间的绝对差异。

4. 模型训练

现在我们可以使用训练数据来训练模型。

history = model.fit(X_train, y_train, epochs=1000, batch_size=32, validation_data=(X_test, y_test), verbose=2)
  • epochs: 这是训练过程中遍历整个训练数据集的次数。
  • batch_size: 这是每次梯度更新中使用的数据样本数量。
  • validation_data: 这是用于评估模型在训练过程中的性能的数据集。
  • verbose: 这决定了训练过程中的输出详细程度。0为安静模式,1为进度条,2为每个epoch一行。

5. 模型评估

训练完成后,我们可以评估模型在测试数据上的性能。

test_loss, test_mae = model.evaluate(X_test, y_test, verbose=2)
print(f'Test MAE: {test_mae}')

6. 模型预测

最后,我们可以使用训练好的模型来对新的数据进行预测。

y_pred = model.predict(X_test)

7. 可视化结果

我们可以将模型的预测结果与实际数据进行比较,以直观地评估模型的性能。

plt.scatter(X_test, y_test, label='Actual')
plt.plot(X_test, y_pred, 'r', label='Predicted')
plt.legend()
plt.show()

好的,接下来我将提供使用LSTM和CNN模型进行数据预测的详细代码案例,包括模型构建、训练和预测的步骤,以及参数的解释。

2. LSTM模型预测

LSTM(长短期记忆网络)是一种特殊的RNN(循环神经网络)架构,非常适合处理和预测时间序列数据。

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 重构数据以适应LSTM输入
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
# 创建模型
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dense(1))
# 编译模型
model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error')
# 训练模型
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test), verbose=2)
# 预测
y_pred = model.predict(X_test)
# 反标准化
y_pred = scaler.inverse_transform(y_pred)
y_test = scaler.inverse_transform(y_test)
# 可视化结果
plt.plot(X_test, y_test, label='Actual')
plt.plot(X_test, y_pred, 'r', label='Predicted')
plt.legend()
plt.show()

3. CNN模型预测

CNN(卷积神经网络)通常用于图像识别和分类任务,但也可以用于一维时间序列数据。

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 重构数据以适应CNN输入
X_train = np.expand_dims(X_train, axis=2)
X_test = np.expand_dims(X_test, axis=2)
# 创建模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dense(1))
# 编译模型
model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error')
# 训练模型
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test), verbose=2)
# 预测
y_pred = model.predict(X_test)
# 反标准化
y_pred = scaler.inverse_transform(y_pred)
y_test = scaler.inverse_transform(y_test)
# 可视化结果
plt.plot(X_test, y_test, label='Actual')
plt.plot(X_test, y_pred, 'r', label='Predicted')
plt.legend()
plt.show()

在这两个案例中,我们首先生成了合成数据,然后划分了训练集和测试集。接着,我们对数据进行标准化处理,并重构数据以适应LSTM和CNN模型的输入要求。创建模型时,我们分别添加了LSTM层和CNN层,然后编译模型,指定优化器和损失函数。最后,我们训练模型并进行预测,最后将预测结果反标准化并可视化展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构===红黑树

文章目录 概要满足的条件基本思想操作红黑树的插入红黑树的删除遍历操作 代码C小结 概要 这篇说下红黑树 其实,红黑树,对于我来说,比较重要的几点。 满足几个条件基本思想插入删除 这些是很重要的。 满足的条件 红黑树需要满足什么条件呢&…

DE2-115开发板基于verilog和nioⅡ的流水灯实现

目录 一、 内容概要二、 实现2.1 基于Nios II软核的流水灯2.1.1 准备工作2.1.2 工程搭建2.1.3 硬件代码设计Ⅰ 连接IP核Ⅱ 编写代码Ⅲ 各种配置 2.1.4 软件代码设计Ⅰ 环境构建Ⅱ 编写代码 2.1.5 代码下载Ⅰ 硬件下载Ⅱ 软件下载 2.1.6 运行结果 2.2 Verilog流水灯 三、 心得体…

带你探索CA和SSL证书

目录 一、什么是CA? 二、什么是SSL证书? 三、SSL证书分类和文件种类? 3.1 证书的分类: 3.2证书格式: 四、SSL和TSL 五、PSK介绍 六、nginx配置介绍 一、什么是CA? CA是证书的签发机构,它是…

sumif的求和区域是文本格式怎么办?

sumif函数的求和区域是文本型数字,不更改源数据的情况下怎么求和呢? 一、不能使用SUMIF、SUMIFS函数 这两个函数的求和区域只能是引用,不能是公式运算的内存数组,因此不能用公式或运算符将求和区转换成数值。当引用来的数据是文本…

公司网页设计思路

在当今互联网时代,公司网页设计是一个极为重要的环节。一款精心设计的公司网页可以提升企业形象,增加用户粘性,吸引更多的潜在客户和合作伙伴。下面将为大家介绍一些公司网页设计的思路。 首先,要确立公司网页的整体风格。网页风格…

Rust学习笔记(下)

前言 笔记的内容主要参考与《Rust 程序设计语言》,一些也参考了《通过例子学 Rust》和《Rust语言圣经》。 Rust学习笔记分为上中下,其它两个地址在Rust学习笔记(上)和Rust学习笔记(中)。 并发 线程 在…

C++的数据结构(四):队列

在数据结构中,队列(Queue)是一种特殊的线性表,只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列中没有元素时,称为空队列。队列的…

基于SSM的“网约车用户服务平台”的设计与实现(源码+数据库+文档)

基于SSM的“网约车用户服务平台”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能 首页 站内新闻浏览 打车信息查询功能 在线打车功能…

Java面试题:死锁的产生和诊断

死锁的产生和诊断 一个线程需要同时获取多把锁时,就容易发生死锁 eg: new Thread(()->{synchronized(A){};synchronized(B){}; }) new Thread(()->{synchronized(B){};synchronized(A){}; }) 线程持有资源并互相等待对方持有的资源 JDK自带工具 jps:输出jvm中运行…

GD32用ST-Link出现internal command error的原因及解决方法

一、GD32 F407烧录时出现can not reset target shutting down debug session 搜寻网上资料,发现解决方式多种多样,做一个简单的总结: 1.工程路径包含中文名 2.需更改debug选项 3.引脚冲突 4.杜邦线太长 而先前我的工程路径包含中文名也仍…

(Java)心得:LeetCode——18.四数之和

一、原题 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): …

Git在windows和Linux安装并自动更新代码超详细讲解

202405122316 一、Git官网安装 1、官网安装地址: Git - Downloading Packagehttps://git-scm.com/download/win 官网下载比较慢建议使用下面链接 2、国内镜像下载地址: CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-fo…

Libcity 笔记:自定义模型

在/libcity/model/trajectory_loc_prediction/,我们复制一份Deepmove.py,得到DM_tst.py,我们不改变其中的机制,只动class name 然后修改相同目录下的__init__.py: 修改task_config文件: 在config/model/tra…

OGG几何内核-网格化的改进

OGG社区于4月19日发布了OGG 1.0 preview版本。相对于OCCT 7.7.0有很多改进,目前在持续研究中。最近测试了一下网格化,确实有很好的改进。对比展示如下: 几何内核: OGG 1.0 preview 几何内核:OCCT 7.7.0 采用OCCT几何内…

2024中国(重庆)VR/AR科技展8月举办

2024中国(重庆)VR/AR科技展8月举办 邀请函 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位: 重庆港华展览有限公司 展会背景: 2024中国航空科普大会暨第八届全国青少年无人机大赛在重庆举办,同时举办第二届中国…

深圳晶彩智能ESP32-1732S019实时观看GPIO的状态

深圳晶彩智能ESP32-1732S019介绍 ESP32-1732S019开发板是基于ESP32-S3-WROOM-1模块作为主控,双核MCU ,集成WI-FI和蓝牙功能,主控频率可达240MHz , 512KB SRAM , 384KB ROM,8M PSRAM,16MB Flash,显示分辨率为170*320 I…

牛津大学和上海交大将SAM和Flow应用于移动目标,简单而有效,轻松分割运动目标!

光流可以在运动物体分割中发现运动物体并为分割提供清晰的边界。然而,如果物体暂时静止,就会面临分割挑战。 而我们知道SAM可以很好的分割静态图像对象。因此,是否可以利用SAM与光流结合来在视频中进行移动物体分割? 今天给大家介…

vue3引入vant完整步骤

在Vue 3中引入Vant(一个基于Vue的移动端UI组件库)的完整步骤通常包括以下几个部分: 安装Vue CLI(如果你还没有安装的话): npm install -g vue/cli 创建一个新的Vue项目: 假设你希望项目名为my…

分享一个php常驻内存多进程任务的扩展

前言 最近在摸鱼的时候发现一个PHP常驻内存多进程任务扩展包:EasyTask: PHP常驻内存多进程任务管理器,支持定时任务(PHP resident memory multi-process task manager, supports timing tasks) (gitee.com),支持php使用多线程处理任务。之前…

重写muduo之TcpServer

目录 1、Callbacks.h 2、TcpServer.h 3、TcpServer.cc 1、Callbacks.h 回调操作 不用依赖boost库&#xff0c;全部翻译成对C11的依赖&#xff0c;与多线程相关&#xff0c;也翻译成C11,与Linux底层的API的关联性减少&#xff0c;移植性更好 #pragma once#include <memo…