日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow独热编码方法_吴恩达课后作业学习2-week3-tensorflow learning-1-基本概念 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

希望大家直接到上面的網(wǎng)址去查看代碼,下面是本人的筆記

到目前為止,我們一直在使用numpy來(lái)自己編寫神經(jīng)網(wǎng)絡(luò)。現(xiàn)在我們將一步步的使用深度學(xué)習(xí)的框架來(lái)很容易的構(gòu)建屬于自己的神經(jīng)網(wǎng)絡(luò)。我們將學(xué)習(xí)TensorFlow這個(gè)框架:

初始化變量

建立一個(gè)會(huì)話

訓(xùn)練的算法

實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)

使用框架編程不僅可以節(jié)省你的寫代碼時(shí)間,還可以讓你的優(yōu)化速度更快。

1.導(dǎo)入TensorFlow庫(kù)

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.說(shuō)明TensorFlow代碼的實(shí)現(xiàn)流程

對(duì)于Tensorflow的代碼實(shí)現(xiàn)而言,實(shí)現(xiàn)代碼的結(jié)構(gòu)如下:

創(chuàng)建Tensorflow變量(此時(shí),尚未直接計(jì)算)

實(shí)現(xiàn)Tensorflow變量之間的操作定義

初始化Tensorflow變量

創(chuàng)建Session

運(yùn)行Session,此時(shí),之前編寫操作都會(huì)在這一步運(yùn)行。

1)所以舉例如果要計(jì)算損失函數(shù):

實(shí)現(xiàn)流程為:

#首先創(chuàng)建變量,這里設(shè)置了常量

y_hat= tf.constant(36,name="y_hat") #定義y_hat為固定值36

y= tf.constant(39,name="y") #定義y為固定值39

#實(shí)現(xiàn)變量之間的操作定義,即損失函數(shù)的計(jì)算

loss= tf.Variable((y-y_hat)**2,name="loss") #為損失函數(shù)創(chuàng)建一個(gè)變量

#聲明變量的初始化操作

init=tf.global_variables_initializer() #運(yùn)行之后的初始化(session.run(init))

#創(chuàng)建session,并打印輸出

#損失變量將被初始化并準(zhǔn)備計(jì)算

with tf.Session()assession:

#初始化變量

session.run(init)

#運(yùn)行session,這樣之前定義的變量間的操作都會(huì)在這里運(yùn)行,打印損失值

print(session.run(loss))

返回9

查看初始化和運(yùn)行前后變量的變化:

#首先創(chuàng)建變量

y_hat= tf.constant(36,name="y_hat") #定義y_hat為固定值36

y= tf.constant(39,name="y") #定義y為固定值39

#實(shí)現(xiàn)變量之間的操作定義,即損失函數(shù)的計(jì)算

loss= tf.Variable((y-y_hat)**2,name="loss") #為損失函數(shù)創(chuàng)建一個(gè)變量

print(y_hat)

print(y)

print(loss)

#聲明變量的初始化操作

init=tf.global_variables_initializer() #運(yùn)行之后的初始化(session.run(init))

#創(chuàng)建session,并打印輸出

#損失變量將被初始化并準(zhǔn)備計(jì)算

with tf.Session()assession:

#初始化變量

session.run(init)

print(y_hat)

print(y)

print(loss)

#運(yùn)行session,這樣之前定義的變量間的操作都會(huì)在這里運(yùn)行,打印損失值

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)

再運(yùn)行一遍,可見版本號(hào)會(huì)變:

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)

如果注釋掉初始化就會(huì)報(bào)錯(cuò):

#首先創(chuàng)建變量

y_hat= tf.constant(36,name="y_hat") #定義y_hat為固定值36

y= tf.constant(39,name="y") #定義y為固定值39

#實(shí)現(xiàn)變量之間的操作定義,即損失函數(shù)的計(jì)算

loss= tf.Variable((y-y_hat)**2,name="loss") #為損失函數(shù)創(chuàng)建一個(gè)變量

print(y_hat)

print(y)

print(loss)

#聲明變量的初始化操作

#init=tf.global_variables_initializer() #運(yùn)行之后的初始化(session.run(init))

#創(chuàng)建session,并打印輸出

#損失變量將被初始化并準(zhǔn)備計(jì)算

with tf.Session()assession:

#初始化變量

#session.run(init)

#運(yùn)行session,這樣之前定義的變量間的操作都會(huì)在這里運(yùn)行,打印損失值

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)]]

因此,當(dāng)我們?yōu)閾p失函數(shù)創(chuàng)建一個(gè)變量時(shí),我們簡(jiǎn)單地將損失定義為其他數(shù)量的函數(shù),但沒有評(píng)估它的價(jià)值。

為了評(píng)估它,我們需要運(yùn)行init=tf.global_variables_initializer(),初始化損失變量,在最后一行,我們最后能夠評(píng)估損失的值并打印它的值。

所以init=tf.global_variables_initializer()的作用對(duì)應(yīng)的是聲明為變量的損失函數(shù)loss = tf.Variable((y-y_hat)**2,name="loss")

2)另外一個(gè)更簡(jiǎn)單的函數(shù)

#創(chuàng)建變量

a= tf.constant(2)

b= tf.constant(10)

#實(shí)現(xiàn)變量之間的操作定義

c=tf.multiply(a,b)

print(c)

返回:

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

正如預(yù)料中一樣,我們并沒有看到結(jié)果20,不過(guò)我們得到了一個(gè)Tensor類型的變量,沒有維度,數(shù)字類型為int32。我們之前所做的一切都只是把這些東西放到了一個(gè)“計(jì)算圖(computation graph)”中,而我們還沒有開始運(yùn)行這個(gè)計(jì)算圖,為了實(shí)際計(jì)算這兩個(gè)數(shù)字,我們需要?jiǎng)?chuàng)建一個(gè)會(huì)話并運(yùn)行它:

#創(chuàng)建會(huì)話

sess=tf.Session()

#使用會(huì)話運(yùn)行操作

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

??因?yàn)檫@里沒有聲明變量,所以不用使用init=tf.global_variables_initializer()來(lái)初始化變量

總結(jié)一下,記得初始化變量,然后創(chuàng)建一個(gè)session來(lái)運(yùn)行它。

3.會(huì)話

可以使用兩種方法來(lái)創(chuàng)建并使用session

方法一:

sess =tf.Session()

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

sess.close()

方法二:

with tf.Session assess:

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

4.占位符(placeholder)

占位符是一個(gè)對(duì)象,它的值只能在稍后指定,要指定占位符的值,可以使用一個(gè)feed_dict變量來(lái)傳入,接下來(lái),我們?yōu)閤創(chuàng)建一個(gè)占位符,這將允許我們?cè)谏院筮\(yùn)行會(huì)話時(shí)傳入一個(gè)數(shù)字。

#利用feed_dict來(lái)改變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

當(dāng)我們第一次定義x時(shí),我們不必為它指定一個(gè)值。 占位符只是一個(gè)變量,我們會(huì)在運(yùn)行會(huì)話時(shí)將數(shù)據(jù)分配給它。

5.線性函數(shù)

讓我們通過(guò)計(jì)算以下等式來(lái)開始編程:Y=WX+b,W和X是隨機(jī)矩陣,b是隨機(jī)向量。

我們計(jì)算WX+b,其中W,X和b是從隨機(jī)正態(tài)分布中抽取的。 W的維度是(4,3),X是(3,1),b是(4,1)。

我們開始定義一個(gè)shape=(3,1)的常量X:

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

代碼:

def linear_function():"""實(shí)現(xiàn)一個(gè)線性功能:

初始化W,類型為tensor的隨機(jī)變量,維度為(4,3)

初始化X,類型為tensor的隨機(jī)變量,維度為(3,1)

初始化b,類型為tensor的隨機(jī)變量,維度為(4,1)

返回:

result- 運(yùn)行了session后的結(jié)果,運(yùn)行的是Y = WX +b"""np.random.seed(1) #指定隨機(jī)種子

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 #也可以以寫成這樣子

#創(chuàng)建一個(gè)session并運(yùn)行它

sess=tf.Session()

result=sess.run(Y)

#session使用完畢,關(guān)閉它

sess.close()return result

測(cè)試:

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

返回:

result = [[-2.15657382]

[2.95891446]

[-1.08926781]

[-0.84538042]]

6.計(jì)算sigmoid函數(shù)

TensorFlow提供了多種常用的神經(jīng)網(wǎng)絡(luò)的函數(shù)比如tf.softmax和tf.sigmoid。

我們將使用占位符變量x,當(dāng)運(yùn)行這個(gè)session的時(shí)候,我們西藥使用使用feed_dict來(lái)輸入z,我們將創(chuàng)建占位符變量x,使用tf.sigmoid來(lái)定義操作,最后運(yùn)行session,我們會(huì)用到下面的代碼:

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

sigmoid = tf.sigmoid(x)

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

實(shí)現(xiàn):

def sigmoid(z):"""實(shí)現(xiàn)使用sigmoid函數(shù)計(jì)算z

參數(shù):

z-輸入的值,標(biāo)量或矢量

返回:

result-用sigmoid計(jì)算z的值"""#創(chuàng)建一個(gè)占位符x,名字叫“x”

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

#計(jì)算sigmoid(z)

sigmoid=tf.sigmoid(x)

#創(chuàng)建一個(gè)會(huì)話,使用方法二

with tf.Session()assess:

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

測(cè)試:

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

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

返回:

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

7.計(jì)算成本函數(shù)

還可以使用內(nèi)置函數(shù)計(jì)算神經(jīng)網(wǎng)絡(luò)的成本。因此,不需要編寫代碼來(lái)計(jì)算成本函數(shù)的a[2](i)和y(i),如:

tensorflow提供了用來(lái)計(jì)算成本的函數(shù):

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

logits:前向傳播的結(jié)果AL,如果使用的是softmax,這里傳入的是ZL

labels:真正的結(jié)果Y

8.使用獨(dú)熱編碼(0,1編碼)

很多時(shí)候在深度學(xué)習(xí)中y向量的維度是從0到C?1的,C是指分類的類別數(shù)量,如果C=4,那么對(duì)y而言你可能需要有以下的轉(zhuǎn)換方式:

這叫做獨(dú)熱編碼(”one hot” encoding),因?yàn)樵谵D(zhuǎn)換后的表示中,每列的一個(gè)元素是“hot”(意思是設(shè)置為1)。 要在numpy中進(jìn)行這種轉(zhuǎn)換,您可能需要編寫幾行代碼。 在tensorflow中,只需要使用一行代碼:

tf.one_hot(labels,depth,axis)

下面我們要做的是取一個(gè)標(biāo)簽矢量(即圖片的判斷結(jié)果)和C類總數(shù),返回一個(gè)獨(dú)熱編碼。

def one_hot_matrix(lables,C):"""創(chuàng)建一個(gè)矩陣,其中第i行對(duì)應(yīng)第i個(gè)類號(hào),第j列對(duì)應(yīng)第j個(gè)訓(xùn)練樣本

所以如果第j個(gè)樣本對(duì)應(yīng)著第i個(gè)標(biāo)簽,那么entry (i,j)將會(huì)是1

參數(shù):

lables-標(biāo)簽向量

C-分類數(shù)

返回:

one_hot-獨(dú)熱矩陣"""#創(chuàng)建一個(gè)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)

#創(chuàng)建一個(gè)session

sess=tf.Session()

#運(yùn)行session

one_hot=sess.run(one_hot_matrix)

#關(guān)閉session

sess.close()return one_hot

測(cè)試:

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.初始化參數(shù)

學(xué)習(xí)如何用0或者1初始化一個(gè)向量,我們要用到tf.ones()和tf.zeros(),給定這些函數(shù)一個(gè)維度值那么它們將會(huì)返回全是1或0的滿足條件的向量/矩陣,我們來(lái)看看怎樣實(shí)現(xiàn)它們:

def ones(shape):"""創(chuàng)建一個(gè)維度為shape的變量,其值全為1

參數(shù):

shape-你要?jiǎng)?chuàng)建的數(shù)組的維度

返回:

ones-只包含1的數(shù)組"""#使用tf.ones()

ones=tf.ones(shape)

#創(chuàng)建會(huì)話

sess=tf.Session()

#運(yùn)行會(huì)話

ones=sess.run(ones)

#關(guān)閉會(huì)話

sess.close()return ones

測(cè)試:

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

返回:

ones = [1. 1. 1.]

總結(jié)

以上是生活随笔為你收集整理的tensorflow独热编码方法_吴恩达课后作业学习2-week3-tensorflow learning-1-基本概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。