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

用TensorFlow进行逻辑回归(一)

这一节我们用TensorFlow定义简单的分类器。首先考虑分类器的方程式是什么是值得的。数学习的技巧是使用sigmoid函数。sigmoid函数绘制如图3-40, 通常标记为σ, 是实数域里的函数取值(0, 1)。这个特征很便利,因为我们可以将sigmoid的输出解释为事件发现的概率。  (转换离散事件到连续值是机器学习里反复出现的主题)

图3-40. 绘制sigmoid 函数.

预测离散事件的概率的方程式如下。这些方程式定义了简单的逻辑回归模型:

y0 = σ( wx + b

y1 = 1 σ (wx + b

TensorFlow提供了工具函数来计算sigmoidal值的交叉熵损失。最简单的函数是tf.nn.sigmoid_cross_entropy_with_logits. ( logitsigmoid的逆。实际上,这意味着传递参数到 sigmoid, wx + b, 而不是sigmoidal value σ wx + b 本身)。我们推荐使用 TensorFlow的实现而不是手工定义交叉熵,因为计算交叉熵损失有许多复杂的数值问题。

#List3-44

import numpy as np

np.random.seed(456)

import tensorflow as tf

#tf.set_random_seed(456)

import matplotlib.pyplot as plt

from sklearn.metrics import accuracy_score

from scipy.special import logit

# Generate synthetic data

N = 100

# Zeros form a Gaussian centered at (-1, -1)

x_zeros = np.random.multivariate_normal(mean=np.array((-1, -1)), cov=.1*np.eye(2), size=(N//2,))

y_zeros = np.zeros((N//2,))

# Ones form a Gaussian centered at (1, 1)

x_ones = np.random.multivariate_normal(mean=np.array((1, 1)), cov=.1*np.eye(2), size=(N//2,))

y_ones = np.ones((N//2,))

x_np = np.vstack([x_zeros, x_ones])

y_np = np.concatenate([y_zeros, y_ones])

# Save image of the data distribution

plt.xlabel(r"$x_1$")

plt.ylabel(r"$x_2$")

plt.title("Toy Logistic Regression Data")

# Plot Zeros

plt.scatter(x_zeros[:, 0], x_zeros[:, 1], color="blue")

plt.scatter(x_ones[:, 0], x_ones[:, 1], color="red")

plt.savefig("logistic_data.png")

x_np,y_np

模型的训练代码见List3-45 ,与线性回归模型的代码相同。

#List3-45

W = tf.Variable(tf.random.normal((2, 1)))

b = tf.Variable(tf.random.normal((1,)))

W,b

x=tf.cast(x_np,tf.float32)

y=tf.cast(y_np,tf.float32)

learning_r=0.01

optimizer = tf.optimizers.SGD(learning_r)

n_steps = 100

# Train model

for i in range(n_steps):   

    with tf.GradientTape() as tape:

        #_, summary, loss = sess.run([train_op, merged, l], feed_dict=feed_dict)

        y_logit = tf.squeeze(tf.matmul(x, W) + b)

        # the sigmoid gives the class probability of 1

        y_one_prob = tf.sigmoid(y_logit)

        # Rounding P(y=1) will give the correct prediction.

        y_pred = tf.round(y_one_prob)

        entropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=y_logit, labels=y)

        # Sum all contributions

        l = tf.reduce_sum(entropy)       

        gradients=tape.gradient(l,[W,b])

    optimizer.apply_gradients(zip(gradients, [W, b]))

    #W=W-tf.Variable(learning_r,tf.float32)*W

    #b=b-tf.Variable(learning_r,tf.float32)*b

    print("loss: %f" % l)

    #train_writer.add_summary(summary, i)

    # Get weights

    w_final=W

    b_final=b

# Make Predictions

    #y_pred_np = sess.run(y_pred, feed_dict={x: x_np})

#score = accuracy_score(y_np, y_pred_np)

#print("Classification Accuracy: %f" % score)

plt.clf()

# Save image of the data distribution

plt.xlabel(r"$x_1$")

plt.ylabel(r"$x_2$")

plt.title("Learned Model (Classification Accuracy: 1.00)")

plt.xlim(-2, 2)

plt.ylim(-2, 2)

# Plot Zeros

plt.scatter(x_zeros[:, 0], x_zeros[:, 1], color="blue")

plt.scatter(x_ones[:, 0], x_ones[:, 1], color="red")

x_left = -2

y_left = (1./w_final[1]) * (-b_final + logit(.5) - w_final[0]*x_left)

x_right = 2

y_right = (1./w_final[1]) * (-b_final + logit(.5) - w_final[0]*x_right)

plt.plot([x_left, x_right], [y_left, y_right], color='k')

plt.savefig("logistic_pred.png")

图3-41

http://www.dtcms.com/a/273520.html

相关文章:

  • AI 产品经理必看:神秘技术架构图如何打通跨团队沟通壁垒?
  • wpf Canvas 导出图片
  • 利用Claude code,只用文字版系统设计大纲,就能轻松实现系统~
  • AIC8800M40低功耗wifi在ARM-LINUX开发板上做OTA的调试经验
  • 【计算机网络】王道考研笔记整理(2)物理层
  • Flask 入门到实战(2):使用 SQLAlchemy 打造可持久化的数据层
  • Java-70 深入浅出 RPC Dubbo 详细介绍 上手指南
  • QT控件 使用QtServer系统服务实现搭建Aria2下载后台服务,并使用Http请求访问Json-RPC接口调用下载退出
  • 和鲸社区深度学习基础训练营2025年关卡4
  • Kubernetes 高级调度 01
  • 飞算科技正在撬动各行业数字化转型的深层变革
  • 【理念●体系】Windows AI 开发环境搭建实录:六层架构的逐步实现与路径治理指南
  • Flask 入门到实战(3):用 SQLAlchemy 优雅操作数据库
  • Cursor、飞算JavaAI、GitHub Copilot、Gemini CLI 等热门 AI 开发工具合集
  • 上位机知识篇---SD卡U盘镜像
  • Gartner《构建可扩展数据产品建设框架》心得
  • 【Linux网络】深入理解HTTP/HTTPS协议:原理、实现与加密机制全面解析
  • 没有Mac如何完成iOS 上架:iOS App 上架App Store流程
  • 从零到一:深度解析汽车标定技术体系与实战策略
  • Python打卡:Day50
  • 将Blender、Three.js与Cesium集成构建物联网3D可视化系统
  • uniapp类似抖音视频滑动
  • GNhao,获取跨境手机SIM卡跨境通信新选择!
  • JAVA面试宝典 -《Spring Boot 自动配置魔法解密》
  • 森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
  • 【LeetCode 热题 100】146. LRU 缓存——哈希表+双向链表
  • [特殊字符]远程服务器配置pytorch环境
  • 闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存
  • 基于ASP.NET MVC+SQLite开发的一套(Web)图书管理系统
  • ContextMenu的Item如何绑定命令