七。自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测

news/2025/2/6 17:00:55 标签: python

import tensorflow as tf
import numpy as np

# 自定义数据集类
class CustomDataset(tf.data.Dataset):
    def __init__(self, x_data, y_data):
        self.x_data = tf.convert_to_tensor(x_data, dtype=tf.float32)
        self.y_data = tf.convert_to_tensor(y_data, dtype=tf.float32)

    def __iter__(self):
        for i in range(len(self.x_data)):
            yield (self.x_data[i], self.y_data[i])

# 逻辑回归模型
class LogisticRegressionModel(tf.keras.Model):
    def __init__(self, input_dim):
        super(LogisticRegressionModel, self).__init__()
        self.linear = tf.keras.layers.Dense(1, input_shape=(input_dim,), activation='sigmoid')

    def call(self, x):
        return self.linear(x)

# 创建数据集
x_data = np.array([[1], [2], [3], [4], [5]], dtype=np.float32)
y_data = np.array([[0], [0], [1], [1], [1]], dtype=np.float32)
dataset = CustomDataset(x_data, y_data)

# 创建数据加载器
dataloader = dataset.batch(2).shuffle(100).repeat()

# 创建模型、损失函数和优化器
model = LogisticRegressionModel(input_dim=1)
loss_object = tf.keras.losses.BinaryCrossentropy()
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

# 训练模型
epochs = 100
for epoch in range(epochs):
    for x_batch, y_batch in dataloader:
        with tf.GradientTape() as tape:
            predictions = model(x_batch)
            loss = loss_object(y_batch, predictions)
        gradients = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    
    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.numpy():.4f}')

# 保存模型
model.save('logistic_regression_model.h5')

# 加载模型
model = tf.keras.models.load_model('logistic_regression_model.h5')

# 进行预测
x_test = np.array([[6], [7], [8]], dtype=np.float32)
y_pred = model.predict(x_test)
print('预测值:', y_pred)
 


http://www.niftyadmin.cn/n/5843200.html

相关文章

无人机测绘技术,为行业开启解决方案新篇章!

随着国土建设的专业化程度不断提升和工作负荷的持续加重,传统测绘方法的局限性也日益显露。它们不仅容易受环境及恶劣气候的制约,还面临着人力资源短缺的挑战,难以适应当前高度专业化的需求。而无人机测绘技术凭借其高度的灵活性和强大的适应…

网络安全--边界安全-防火墙

随着安全技术的发展,无论是黑客的攻击能力,还是安全人员的防御技术都上升到了一个新的层次,而且安全威胁越来越大,越来越隐蔽,本篇就边界安全另一利器----防火墙进行讲述。见到过不少厂家的防火墙设备,有些…

堆(Heap)的原理与C++实现

1. 什么是堆? 堆(Heap)是一种特殊的树形数据结构,通常用于实现优先队列。堆可以分为两种类型: 最大堆(Max Heap):每个节点的值都大于或等于其子节点的值。最小堆(Min H…

【数据结构】循环链表

循环链表 单链表局限性单向循环链表判断链表是否有环思路code 找到链表入口思路代码结构与逻辑 code 单链表局限性 单链表作为一种基本的数据结构,虽然在很多场景下都非常有用,但它也存在一些局限性: 单向访问:由于每个节点仅包含…

VMware下Linux和macOS遇到的一些问题总结

1.解决.NET程序通过网盘传到Linux和macOS不能运行的问题 这是文件权限的问题。当你通过U盘将文件传输到虚拟机的macOS和Linux系统时,文件的权限和所有权可能得到了保留或正确设置。但如果你通过网盘上传,文件的权限或所有权可能没有正确设置&#xff0c…

kamailio-ACC_JSON模块详解

ACC_JSON 模块 作者 Julien Chavanton jchavantongmail.com Julien Chavanton flowroute.com jchavantongmail.com 编辑 Julien Chavanton flowroute.com jchavantongmail.com 版权 © 2018 Flowroute.com 目录 管理员指南 概述依赖 2.1 Kamailio 模块 2.2 外部库或应用…

.net framework 4.5 的项目,用Mono 部署在linux

步骤 1:安装 Mono 更新包列表: 首先,更新 Ubuntu 的包列表以确保获取最新的软件包信息。 sudo apt update 安装 Mono: 安装 Mono 完整版(mono-complete),它包含了运行 .NET 应用程序所需的所有…

阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存

技术一面 20 分钟 1、自我介绍 说了很多遍了,很流畅捡重点介绍完。 2、问我数据结构算法好不好 挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充胖子了) 3、找到单链表的三等分点,如果单链表是有环的…