tensorflow独热编码方法_吴恩达课后作业学习2-week3-tensorflow learning-1-基本概念

参考:https://blog.csdn.net/u013733326/article/details/79971488

希望大家直接到上面的网址去查看代码,下面是本人的笔记

到目前为止,我们一直在使用numpy来自己编写神经网络。现在我们将一步步的使用深度学习的框架来很容易的构建属于自己的神经网络。我们将学习TensorFlow这个框架:

初始化变量

建立一个会话

训练的算法

实现一个神经网络

使用框架编程不仅可以节省你的写代码时间,还可以让你的优化速度更快。

1.导入TensorFlow库

import numpy asnp

import h5py

import matplotlib.pyplotasplt

import tensorflowastffromtensorflow.python.framework import ops

import tf_utils

import time

#%matplotlib inline #如果你使用的是jupyter notebook取消注释

np.random.seed(1)

2.说明TensorFlow代码的实现流程

对于Tensorflow的代码实现而言,实现代码的结构如下:

创建Tensorflow变量(此时,尚未直接计算)

实现Tensorflow变量之间的操作定义

初始化Tensorflow变量

创建Session

运行Session,此时,之前编写操作都会在这一步运行。

1)所以举例如果要计算损失函数:

564ccc52a4c1d31ef05a3858bf52aa1c.png

实现流程为:

#首先创建变量,这里设置了常量

y_hat= tf.constant(36,name="y_hat") #定义y_hat为固定值36

y= tf.constant(39,name="y") #定义y为固定值39

#实现变量之间的操作定义,即损失函数的计算

loss= tf.Variable((y-y_hat)**2,name="loss") #为损失函数创建一个变量

#声明变量的初始化操作

init=tf.global_variables_initializer() #运行之后的初始化(session.run(init))

#创建session,并打印输出

#损失变量将被初始化并准备计算

with tf.Session()assession:

#初始化变量

session.run(init)

#运行session,这样之前定义的变量间的操作都会在这里运行,打印损失值

print(session.run(loss))

返回9

查看初始化和运行前后变量的变化:

#首先创建变量

y_hat= tf.constant(36,name="y_hat") #定义y_hat为固定值36

y= tf.constant(39,name="y") #定义y为固定值39

#实现变量之间的操作定义,即损失函数的计算

loss= tf.Variable((y-y_hat)**2,name="loss") #为损失函数创建一个变量

print(y_hat)

print(y)

print(loss)

#声明变量的初始化操作

init=tf.global_variables_initializer() #运行之后的初始化(session.run(init))

#创建session,并打印输出

#损失变量将被初始化并准备计算

with tf.Session()assession:

#初始化变量

session.run(init)

print(y_hat)

print(y)

print(loss)

#运行session,这样之前定义的变量间的操作都会在这里运行,打印损失值

print(session.run(loss))

print(y_hat)

print(y)

返回:

Tensor("y_hat_2:0", shape=(), dtype=int32)

Tensor("y_2:0", shape=(), dtype=int32)Tensor("y_hat_2:0", shape=(), dtype=int32)

Tensor("y_2:0", shape=(), dtype=int32)

9Tensor("y_hat_2:0", shape=(), dtype=int32)

Tensor("y_2:0", shape=(), dtype=int32)

再运行一遍,可见版本号会变:

Tensor("y_hat_3:0", shape=(), dtype=int32)

Tensor("y_3:0", shape=(), dtype=int32)Tensor("y_hat_3:0", shape=(), dtype=int32)

Tensor("y_3:0", shape=(), dtype=int32)

9Tensor("y_hat_3:0", shape=(), dtype=int32)

Tensor("y_3:0", shape=(), dtype=int32)

如果注释掉初始化就会报错:

#首先创建变量

y_hat= tf.constant(36,name="y_hat") #定义y_hat为固定值36

y= tf.constant(39,name="y") #定义y为固定值39

#实现变量之间的操作定义,即损失函数的计算

loss= tf.Variable((y-y_hat)**2,name="loss") #为损失函数创建一个变量

print(y_hat)

print(y)

print(loss)

#声明变量的初始化操作

#init=tf.global_variables_initializer() #运行之后的初始化(session.run(init))

#创建session,并打印输出

#损失变量将被初始化并准备计算

with tf.Session()assession:

#初始化变量

#session.run(init)

#运行session,这样之前定义的变量间的操作都会在这里运行,打印损失值

print(session.run(loss))

print(y_hat)

print(y)

返回:

Tensor("y_hat_5:0", shape=(), dtype=int32)

Tensor("y_5:0", shape=(), dtype=int32)...

FailedPreconditionError: Attempting to use uninitialized value loss_5

[[{{node _retval_loss_5_0_0}}= _Retval[T=DT_INT32, index=0, _device="/job:localhost/replica:0/task:0/device:CPU:0"](loss_5)]]

因此,当我们为损失函数创建一个变量时,我们简单地将损失定义为其他数量的函数,但没有评估它的价值。

为了评估它,我们需要运行init=tf.global_variables_initializer(),初始化损失变量,在最后一行,我们最后能够评估损失的值并打印它的值。

所以init=tf.global_variables_initializer()的作用对应的是声明为变量的损失函数loss = tf.Variable((y-y_hat)**2,name="loss")

2)另外一个更简单的函数

#创建变量

a= tf.constant(2)

b= tf.constant(10)

#实现变量之间的操作定义

c=tf.multiply(a,b)

print(c)

返回:

Tensor("Mul:0", shape=(), dtype=int32)

正如预料中一样,我们并没有看到结果20,不过我们得到了一个Tensor类型的变量,没有维度,数字类型为int32。我们之前所做的一切都只是把这些东西放到了一个“计算图(computation graph)”中,而我们还没有开始运行这个计算图,为了实际计算这两个数字,我们需要创建一个会话并运行它:

#创建会话

sess=tf.Session()

#使用会话运行操作

print(sess.run(c)) #返回20

⚠️因为这里没有声明变量,所以不用使用init=tf.global_variables_initializer()来初始化变量

总结一下,记得初始化变量,然后创建一个session来运行它。

3.会话

可以使用两种方法来创建并使用session

方法一:

sess =tf.Session()

result= sess.run(...,feed_dict ={...})

sess.close()

方法二:

with tf.Session assess:

result= sess.run(...,feed_dict = {...})

4.占位符(placeholder)

占位符是一个对象,它的值只能在稍后指定,要指定占位符的值,可以使用一个feed_dict变量来传入,接下来,我们为x创建一个占位符,这将允许我们在稍后运行会话时传入一个数字。

#利用feed_dict来改变x的值

x= tf.placeholder(tf.int64,name="x")

print(x)

print(sess.run(2 * x,feed_dict={x:3}))

sess.close()

返回:

Tensor("x:0", dtype=int64)6

当我们第一次定义x时,我们不必为它指定一个值。 占位符只是一个变量,我们会在运行会话时将数据分配给它。

5.线性函数

让我们通过计算以下等式来开始编程:Y=WX+b,W和X是随机矩阵,b是随机向量。

我们计算WX+b,其中W,X和b是从随机正态分布中抽取的。 W的维度是(4,3),X是(3,1),b是(4,1)。

我们开始定义一个shape=(3,1)的常量X:

X = tf.constant(np.random.randn(3,1), name = "X")

代码:

def linear_function():"""实现一个线性功能:

初始化W,类型为tensor的随机变量,维度为(4,3)

初始化X,类型为tensor的随机变量,维度为(3,1)

初始化b,类型为tensor的随机变量,维度为(4,1)

返回:

result- 运行了session后的结果,运行的是Y = WX +b"""np.random.seed(1) #指定随机种子

X= np.random.randn(3,1)

W= np.random.randn(4,3)

b= np.random.randn(4,1)

Y=tf.add(tf.matmul(W,X),b) #tf.matmul是矩阵乘法

#Y= tf.matmul(W,X) +b #也可以以写成这样子

#创建一个session并运行它

sess=tf.Session()

result=sess.run(Y)

#session使用完毕,关闭它

sess.close()return result

测试:

print("result =" + str(linear_function()))

返回:

result = [[-2.15657382]

[2.95891446]

[-1.08926781]

[-0.84538042]]

6.计算sigmoid函数

TensorFlow提供了多种常用的神经网络的函数比如tf.softmax和tf.sigmoid。

我们将使用占位符变量x,当运行这个session的时候,我们西药使用使用feed_dict来输入z,我们将创建占位符变量x,使用tf.sigmoid来定义操作,最后运行session,我们会用到下面的代码:

tf.placeholder(tf.float32, name = “x”)

sigmoid = tf.sigmoid(x)

sess.run(sigmoid, feed_dict = {x: z})

实现:

def sigmoid(z):"""实现使用sigmoid函数计算z

参数:

z-输入的值,标量或矢量

返回:

result-用sigmoid计算z的值"""#创建一个占位符x,名字叫“x”

x= tf.placeholder(tf.float32,name="x")

#计算sigmoid(z)

sigmoid=tf.sigmoid(x)

#创建一个会话,使用方法二

with tf.Session()assess:

result= sess.run(sigmoid,feed_dict={x:z})return result

测试:

print ("sigmoid(0) =" + str(sigmoid(0)))

print ("sigmoid(12) =" + str(sigmoid(12)))

返回:

sigmoid(0) = 0.5sigmoid(12) = 0.9999938

7.计算成本函数

还可以使用内置函数计算神经网络的成本。因此,不需要编写代码来计算成本函数的a[2](i)和y(i),如:

d2def132d39d10a83574005e6452784e.png

tensorflow提供了用来计算成本的函数:

tf.nn.sigmoid_cross_entropy_with_logits(logits = ..., labels = ...)

logits:前向传播的结果AL,如果使用的是softmax,这里传入的是ZL

labels:真正的结果Y

8.使用独热编码(0,1编码)

很多时候在深度学习中y向量的维度是从0到C−1的,C是指分类的类别数量,如果C=4,那么对y而言你可能需要有以下的转换方式:

31f9474f923163f81182615314bbf482.png

这叫做独热编码(”one hot” encoding),因为在转换后的表示中,每列的一个元素是“hot”(意思是设置为1)。 要在numpy中进行这种转换,您可能需要编写几行代码。 在tensorflow中,只需要使用一行代码:

tf.one_hot(labels,depth,axis)

下面我们要做的是取一个标签矢量(即图片的判断结果)和C类总数,返回一个独热编码。

def one_hot_matrix(lables,C):"""创建一个矩阵,其中第i行对应第i个类号,第j列对应第j个训练样本

所以如果第j个样本对应着第i个标签,那么entry (i,j)将会是1

参数:

lables-标签向量

C-分类数

返回:

one_hot-独热矩阵"""#创建一个tf.constant,赋值为C,名字叫C

C= tf.constant(C,name="C")

#使用tf.one_hot,注意一下axis

one_hot_matrix= tf.one_hot(indices=lables , depth=C , axis=0)

#创建一个session

sess=tf.Session()

#运行session

one_hot=sess.run(one_hot_matrix)

#关闭session

sess.close()return one_hot

测试:

labels = np.array([1,2,3,0,2,1])

one_hot= one_hot_matrix(labels,C=4)

print(str(one_hot))

返回:

[[0. 0. 0. 1. 0. 0.]

[1. 0. 0. 0. 0. 1.]

[0. 1. 0. 0. 1. 0.]

[0. 0. 1. 0. 0. 0.]]

9.初始化参数

学习如何用0或者1初始化一个向量,我们要用到tf.ones()和tf.zeros(),给定这些函数一个维度值那么它们将会返回全是1或0的满足条件的向量/矩阵,我们来看看怎样实现它们:

def ones(shape):"""创建一个维度为shape的变量,其值全为1

参数:

shape-你要创建的数组的维度

返回:

ones-只包含1的数组"""#使用tf.ones()

ones=tf.ones(shape)

#创建会话

sess=tf.Session()

#运行会话

ones=sess.run(ones)

#关闭会话

sess.close()return ones

测试:

print ("ones =" + str(ones([3])))

返回:

ones = [1. 1. 1.]

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

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

相关文章

基于Dubbo框架构建分布式服务

一、Dubbo服务集群容错 假设我们使用的是单机模式的Dubbo服务,如果在服务提供方(Provider)发布服务以后,服务消费方(Consumer)发出一次调用请求,恰好这次由于网络问题调用失败,那么我…

如果我们不曾相遇

五月天的演唱会定的是9月10号,周六晚上7点。 而我,差不多,从一周前就开始准备了,因为公司最近在赶工,特别忙。为了周末不加班我提前一周就旁敲侧击地询问师父的时间安排,最后又耿直地告诉师父我的周末计划&…

win下php的memcached的安装与使用

1、memcache的php扩展与memcached服务器的区别? php要操作memcached就必须要安装memcache的扩展, 在http://windows.php.net/downloads/pecl/releases/memcache/下载相应版本安装。 而php要操作memcached就必须要有memcached的服务,不然没有服…

mysql 表的存储类型_MySQL数据表存储引擎类型及特性

数据表类型(存储引擎)常见引擎比对 特点 Myisam InnoDB Memory BDB Archive 存储限制 无穷制 64TB 有 没有 没有 事务安然 - 支撑 - 支撑 - 锁机制 表锁 行锁 表锁 页锁 行锁 B树索引 支撑 支撑 支撑 支撑 - 哈希索引 - 支撑 支撑 - - 全文索引 支撑 - - - - 集群索引 - 支撑 -…

ORM中的Model与DDD中的DomainModel

0.引言 在现有的系统开发中,大部分的系统应该都会用到ORM,无论用的是EF还是NHibernate。作为对象和持久化数据的桥梁,ORM确实非常方便,以至于在DDD的时候,我们很自然的将 ORM中的Model(实体)表达成DDD中的 DomainModel…

jsp java语法_JSP基础语法

Java JSP 的 JSP基础语法在本章中,我们将了解和学习JSP语法。并了解JSP开发涉及的简单语法(即元素)的基本用法。为了方便演示,使用Eclipse创建一个动态Web项目:jspsyntax,用于运行以下涉及到的示例代码。JSP的元素JSP的元素如下所…

iOS - Core Animation 核心动画

1、UIView 动画 具体讲解见 iOS - UIView 动画2、UIImageView 动画 具体讲解见 iOS - UIImageView 动画3、CADisplayLink 定时器 具体讲解见 iOS - OC NSTimer 定时器CADisplayLink 是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。我们在应用中创建一个新的…

【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)

1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3601 Solved: 1322Description 农夫John准备扩大他的农场,他正在考虑N (1 < N < 50,000) 块长方形的土地. 每块土地的长宽满足(1 < 宽 < 1,000,000; 1 < 长 < 1,000,000). …

深入浅出学java_《深入浅出学JAVA开发初级》

整体说明&#xff1a;Java私塾的这一套视频是完全真实课堂录制&#xff0c;实际上课时间为十一天&#xff0c;主要内容包括&#xff1a;1&#xff1a;系统完整的学习Java的基础知识2&#xff1a;深入剖析重点知识点的理论3&#xff1a;超多的编程题目和程序讲解4&#xff1a;最…

Linux bashrc和profile的用途和区别

导读使用终端ssh登录Linux操作系统的控制台后&#xff0c;会出现一个提示符号&#xff08;例如&#xff1a;#或~&#xff09;&#xff0c;在这个提示符号之后可以输入命令&#xff0c;Linux根据输入的命令会做回应&#xff0c;这一连串的动作是由一个所谓的Shell来做处理。Shel…

Golang 特性简介

by sheepbao 主要大概介绍go语言的历史和特性&#xff0c;简单的入门。 来历 很久以前&#xff0c;有一个IT公司&#xff0c;这公司有个传统&#xff0c;允许员工拥有20%自由时间来开发实验性项目。在2007的某一天&#xff0c;公司的几个大牛&#xff0c;正在用c开发一些比较繁…

华为2017java笔试题_2017年java华为面试题

2017年java华为面试题通过HCNP认证&#xff0c;将证明您对中小型网络有全面深入的了解&#xff0c;掌握中小型网络的通用技术&#xff0c;并具备独立设计中小型网络以及使用华为路由交换设备实施设计的能力。下面是小编收集的关于java华为面试题&#xff0c;希望大家认真阅读!1…

java框架概念_java概念(2)

java概念(2)重载和重写重载&#xff1a;同一个类中&#xff0c;方法名相同&#xff0c;参数不同重写&#xff1a;父子类中&#xff0c;子类重新定义父类的方法多态​ 多态&#xff1a;同一种行为&#xff0c;不同的对象有不同的表现形式。​ 重载 编译时根据参数决定调用的方法…

CentOS(八)--crontab命令的使用方法

crontab命令常见于Unix和Linux的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于"crontab"文件中&#xff0c;以供之后读取和执行。 在Linux系统中&#xff0c;Linux任务调度的工作主要分为以下两类&…

有健忘症吗?

今天兴高采烈&#xff0c;早上空气不错&#xff0c; 但是骑自行车的我&#xff0c;还是得戴一个面罩。 半个小时后买了早餐&#xff0c; 一份炒粉、一豆浆&#xff0c;今天早上豆浆没有掉地上&#xff0c; 但是~~~~~~~~~~~~~~shit~~!~!~,居然忘记带要换的衣服了&#xff0c; …

下载java后缀的文件闪退_关于jarfile 打开闪退问题

后面才发现&#xff0c;原来是因为我把文件拖入了新建的文件夹&#xff0c;改变了路径&#xff0c;而且我的java环境没有配置好是全局变量&#xff0c;所以新建文件夹之后&#xff0c;就会出现找不到了路径&#xff0c;闪退的问题&#xff0c;&#xff0c;&#xff0c;还有就是…

java怎样写入五个人的成绩_用java输入5个学员姓名和分数,显示分数最高的学员姓名和分数?...

展开全部import java.util.Scanner;public class Student {private String stuname "";private float stuscore 0;public String getStuname() {e69da5e6ba9062616964757a686964616f31333335316633return stuname;}public void setStuname(String stuname) {this.s…

iOS 10 升级后无法真机测试 Could not find Developer Disk Image

&#xff0d;&#xff0d;&#xff0d;2016年9月20日更新 iOS 升级到10之后&#xff0c;你会发现无法进行真机测试了。这种情况我在iOS 8.4 、9.3更新的时候也遇到过。原因是Xcode 的DeviceSupport里面缺少了iOS 10的SDK。所以你可以选择将Xcode更新到最新版本就可以了&#xf…

java虚拟机参数优化_JAVA虚拟机JVM参数优化(2):垃圾收集算法选择

JAVA虚拟机JVM优化重要性&#xff0c;昨天JAVA虚拟机JVM参数优化(1)文章中已经描述&#xff0c;今天我们来讨论JAVA虚拟机在不同性能要求下如何选择三种垃圾收集算法。JVM内部结构如下图所示&#xff1a;串行收集用于单个线程执行垃圾收集的情况&#xff0c;在这种情况下相对它…