Tensorflow学习之逻辑回归的实现

TensorFlow学习笔记(三):TensorFlow实现逻辑回归模型 一、Mnist数据集的介绍与获取 1.Mnist数据集的介绍 简介 60000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test) 每一个MNIST数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签。我们把这些图片设为“xs”,把这些标签设为“ys”。训练数据集和测试数据集都包含xs和ys,比如训练数据集的图片是 mnist.trai 阅读详情

代码:

# coding:utf-8
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

data=[]
label=[]
np.random.seed(0)

##随机产生训练集
for i in range(150):
    x1=np.random.uniform(-1,1)
    x2=np.random.uniform(0,2)
    if x1**2+ x2**2<=1:
        data.append([np.random.normal(x1,0.1),np.random.normal(x2,0.1)])
        label.append(0)
    else:
        data.append([np.random.normal(x1,0.1),np.random.normal(x2,0.1)])
        label.append(1)
# -1就是让系统根据元素数和已知行或列推算出剩下的列或者行,-1就是模糊控制,(-1,2)
# 就是固定两列,行不知道
data=np.hstack(data).reshape(-1,2)
label=np.hstack(label).reshape(-1,1)
plt.scatter(data[ : ,0], data[ :, 1], c=label, cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
plt.show()

#知识点:
#tf.add_to_collection:把变量放入一个集合,把很多变量变成一个列表

#tf.get_collection:从一个结合中取出全部变量,是一个列表

#tf.add_n:把一个列表的东西都依次加起来

def get_weight(shape,lambda1):
    var=tf.Variable(tf.random_normal(shape),dtype=tf.float32)
    tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(lambda1)(var))
    return var

x=tf.placeholder(tf.float32,shape=(None,2))
y_=tf.placeholder(tf.float32,shape=(None,1))

sample_size=len(data)

#定义的神经结构每一层的节点个数
layer_dimension=[2,10,5,3,1]
n_layers=len(layer_dimension)

cur_layer=x

#输入层
in_dimension=layer_dimension[0]

#向前遍历
for i in range(1,n_layers):
    out_dimension=layer_dimension[i]
    weight=get_weight([in_dimension,out_dimension],0.03)
    bias=tf.Variable(tf.constant(0.1,shape=[out_dimension]))
    ##tf.nn.elu是激活函数
    cur_layer=tf.nn.elu(tf.matmul(cur_layer,weight)+bias)
    in_dimension=layer_dimension[i]

y=cur_layer

mse_loss=tf.reduce_sum(tf.pow(y_-y,2))/sample_size
tf.add_to_collection('losses',mse_loss)
loss=tf.add_n(tf.get_collection('losses'))

train_op=tf.train.AdamOptimizer(0.001).minimize(mse_loss)
TRAINING_STEPS=40000

with tf.Session() as sess:
    tf.initialize_all_variables().run()
    for i in range(TRAINING_STEPS):
        sess.run(train_op,feed_dict={x:data,y_:label})
        if(i%2000)==0:
            print("After %d steps, mse_loss:%f" % (i,sess.run(mse_loss,feed_dict={x:data,y_:label})))
    #画出训练后的分割函数
    #mgrid函数产生两个240×241的数组:-1.2到1.2每隔0.01取一个数共240个
    xx,yy= np.mgrid[-1.2:1.2:.01,-0.2:2.2:.01]
    ##np.c_应该是合并两个数组
    grid=np.c_[xx.ravel(),yy.ravel()]
    probs=sess.run(y,feed_dict={x:grid})
    probs=probs.reshape(xx.shape)

plt.scatter(data[:,0],data[:,1],c=label,cmap="RdBu",vmin=-.2,vmax=1.2,edgecolors="white")
plt.contour(xx,yy,probs,levels=[.5],cmap="Greys",vmin=0,vmax=.1)
plt.show()

"""
#带正则化参数训练
 train_op=tf.train.AdamOptimizer(0.001).minimize(loss)
TRAINING_STEPS=40000
with tf.Session() as sess:
    tf.initialize_all_variables().run()
    for i in range(TRAINING_STEPS):
        sess.run(train_op,feed_dict={x:data,y_:label})
        if i%2000==0:
            print("After %d steps, mse_loss:%f"(i, sess.run(loss, feed_dict={x: data, y_: label})))
    xx, yy = np.mgrid[-1.2:1.2:.01, -0.2:2.2:.01]
    grid = np.c_[xx.ravel(), yy.ravel()]
    probs = sess.run(y, feed_dict={x: grid})
    probs = probs.reshape(xx.shape)

plt.scatter(data[:,0],data[:,1],c=label,cmap="RdBu",vmin=-.2,vmax=1.2,edgecolors="white")
plt.contour(xx,yy,probs,levels=[.5],cmap="Greys",vmin=0,vmax=.1)
plt.show()
"""

结果:可视化数据:

这时我们可以看到出现里过拟合现象,这时候我们就需要用正则化来防止过拟合。。

正则化后结果:

tensorflow深度学习之逻辑回归算法(一)手写底层实现 **tensorflow三部曲** 定义计算 开启会话 执行计算 阅读详情

相关推荐

【TensorFlow】逻辑回归原理与实现(超详细)

逻辑回归原理与实现学习目标1. 神经网络基础1.1 Logistic回归1.2 逻辑回归损失函数2. 梯度下降算法3. 导数3.1 导数3.2 导数计算图3.3 链式法则3.4 逻辑回归的梯度下降4. 向量化编程4.1 向量化优势4.2 向量化实现伪代码5. 案例:实现逻辑回归5.1 使用数据:制作二分类数据集5.2 步骤设计 学习目标 目标 知道逻辑回归的算法计算输出、损失函数 知道导数的计算图 知道逻辑回归的梯度下降算法 知道多样本的向量计算 应用 应用完成向量化运算 应用完成一个单神经元神经

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2690

linux下redhat6.8(理论是都适用)安装oracle12c---详细教程

1、配置yum源 1)、删除Redhat自带的yum: (2)、上传centos的yum包,并按照顺序安装,所需的rpm包通过点击这里获取(放在oracle文件中的centos yum):上传到linux中 进行安装 yum包链接:https://pan.baidu.com/s/1TxciCWEd7d-d4kGoea0L1w 提取码:eufp `` --注意后面两个安装包一起安装 ## 3)、更改系统yum源: 编辑rhel-source.repo文件,将其中的$releas

z931407229的博客 1149

FPGA以太网通信实战(一):实现MDIO接口驱动,掌控PHY芯片的钥匙

本文介绍了以太网通信技术及其核心组件。首先概述了以太网的发展历程,从标准以太网(10Mbps)到万兆以太网(10Gbps)的技术演进。重点分析了以太网接口的两大核心部件:MAC控制器负责数据链路层协议处理,PHY芯片负责物理信号转换和连接管理。文章详细解读了MDIO接口规范,包括帧格式和读写时序,并以YT8531 PHY芯片为例,介绍了其寄存器配置方法。最后设计了一个FPGA实现方案,通过MDIO接口完成PHY芯片的软复位和状态监测功能,并利用LED指示灯实时显示网络连接速率。

weixin_64402689的博客 1662

win10任务栏文件夹设置成竖形列表样式

win10任务栏文件夹设置成竖形列表样式

ftzchina的博客 7081

iverilog+GTKwave使用总结

iverilog是一个开源的硬件描述语言(HDL)仿真工具,用于对硬件描述语言(如Verilog)编写的数字电路进行仿真。它可以将Verilog代码编译为仿真模型,并通过仿真运行来验证设计的正确性。iverilog支持IEEE 1364-2005 Verilog语言标准,并提供了丰富的功能,包括对多种Verilog语言特性的支持、模块化设计、测试平台等。它还可以与其他工具(如GTKWave波形查看器)配合使用,以便进行仿真后的波形查看和分析。

争取早日成为硅农 2万+

为什么我的 Spark Executor / Yarn Container 只有一个vCore?

在很多集群里,在关闭了Spark的DynamicAllocation的前提下(避免自动申请空闲资源,干扰测试结果),都会观察到:提交Spark作业时,申请 1 个 driver + n 个 executor 会在Yarn上会对应创建 n+1 个 container,但是每个container只有一个vCore,通过--driver-cores和--executor-cores设定的vCore数都未奏效。有人会因此错误的认为Yarn上的一个vCore对应一个Spark的executor,这是非常错误的,正确的

Laurence的技术博客 916

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2026

2025华为od机试真题B卷【版本管理】Python实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 644

贝叶斯(Bayes)决策理论

在博文【模式识别PR和模式的概念】介绍了相关的模式识别与模式的概念。在本节描述所要讨论的问题之前,再提一下对于待识别的物理对象的描述问题。假设一个待识别的物理对象用其d个属性观察值描述,称之为d个特征,这组成一个d维的特征向量,而这d维待征所有可能的取值范围则组成了一个d维的特征空间。一般地,机器实现自动分类有两大类方法:一种是模板匹配方法,另一种是对特征空间划分为子空间(每类的势力范围)的方法。

松子茶的专栏 3万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: java算法之Sqrt of x
下一篇: java算法之最大子阵列
NFMSR
博客等级 码龄11年 59粉丝 74原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值