色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow的運(yùn)行環(huán)境及求解過程詳解

lviY_AI_shequ ? 2017-12-05 17:21 ? 次閱讀

首先,何謂tensor?即高維向量,例如矩陣是二維,tensor是更廣義意義上的n維向量(有type+shape)

TensorFlow執(zhí)行過程為定義圖,其中定義子節(jié)點(diǎn),計(jì)算時(shí)只計(jì)算所需節(jié)點(diǎn)所依賴的節(jié)點(diǎn),是一種高效且適應(yīng)大規(guī)模的數(shù)據(jù)計(jì)算,方便分布式設(shè)計(jì),對(duì)于復(fù)雜神經(jīng)網(wǎng)絡(luò)的計(jì)算,可將其拆開到其他核中同時(shí)計(jì)算。

Theano——torch———caffe(尤其是圖像處理)——deeplearning5j——H20——MXNet,TensorFlow

運(yùn)行環(huán)境

下載docker

打開docker quickstart terminal

標(biāo)紅地方顯示該docker虛擬機(jī)IP地址(即之后的localhost)

docker tensorflow/tensorflow//自動(dòng)找到TensorFlow容器并下載

docker images//瀏覽當(dāng)前容器

docker run -p 8888:8888 tensorflow/tensorflow//在8888端口運(yùn)行

會(huì)出現(xiàn)一個(gè)token,復(fù)制該鏈接并替換掉localhost,既可以打開TensorFlow的一個(gè)編寫器,jupyter

大體雛形#python導(dǎo)入importtensorflowastf#定義變量(節(jié)點(diǎn))x = tf.Variable(3, name="x")y = tf.Variable(4, name="y")f = x*x*y + y +2#定義sessionsess = tf.Session()#為已經(jīng)定義的節(jié)點(diǎn)賦值sess.run(x.initializer)sess.run(y.initializer)#運(yùn)行sessionresult = sess.run(f)print(result) #42#釋放空間sess.close

還有一個(gè)更簡(jiǎn)潔的一種定義并運(yùn)行session方法

# a better waywith tf.Session()assess: x.initializer.run() y.initializer.run()#即evaluate,求解f的值 result = f.eval()

初始化的兩行也可以寫作

init = tf.global_variables_initializer()

init.run()

而session可以改作sess=tf.InteractiveSession()運(yùn)行起來(lái)更方便

init =tf.global_variables_initializer()sess =tf.InteractiveSession()init.run()result =f.eval()print(result)

因而TensorFlow的代碼分為兩部分,定義部分和執(zhí)行部分

TensorFlow是一個(gè)圖的操作,有自動(dòng)缺省的默認(rèn)圖和你自己定義的圖

#系統(tǒng)默認(rèn)缺省的圖>>> x1 = tf.Variable(1)>>> x1.graph is tf.get_default_graph()True#自定義的圖>>> graph = tf.Graph()>>> with graph.as_default():x2 = tf.Variable(2)>>> x2.graph is graphTrue>>> x2.graph is tf.get_default_graph()False節(jié)點(diǎn)的生命周期

第二種方法可以找出公共部分,避免x被計(jì)算2次。

運(yùn)行結(jié)束后所有節(jié)點(diǎn)的值都被清空,如果沒有單獨(dú)保存,還需重新run一遍。

w=tf.constant(3)x=w+2y=x+5z=x*3withtf.Session()assess: print(y.eval()) #10 print(z.eval()) #15withtf.Session()assess: y_val, z_val = sess.run([y,z]) print(y_val) #10 print(z_val) #15Linear Regression with TensorFlow

(線性回歸上的應(yīng)用)

y = wx+b = wx'//這里x'是相較于x多了一維全是1的向量

這里引用California housing的數(shù)據(jù)

TensorFlow上向量是列向量,需要reshape(-1,1)即轉(zhuǎn)置成列向量

使用normal equation方法求解

import numpyasnpfrom sklearn.datasets import fetch_california_housinghousing = fetch_california_housing()#獲得數(shù)據(jù)維度,矩陣的行列長(zhǎng)度m, n = housing.data.shape#np.c_是連接的含義,加了一個(gè)全為1的維度housing_data_plus_bias = np.c_[np.ones((m,1)), housing.data]#數(shù)據(jù)量并不大,可以直接用常量節(jié)點(diǎn)裝載進(jìn)來(lái),但是之后海量數(shù)據(jù)無(wú)法使用(會(huì)用minbatch的方式導(dǎo)入數(shù)據(jù))X=tf.constant(housing_data_plus_bias, dtype=tf.float32, name="X")#轉(zhuǎn)置成列向量y=tf.constant(housing.target.reshape(-1,1), dtype=tf.float32, name="y")XT =tf.transpose(X)#使用normalequation的方法求解theta,之前線性模型中有提及theta =tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(XT,X)), XT),y)#求出權(quán)重withtf.Session()assess: theta_value = theta.eval()

如果是原本的方法,可能更直接些。但由于使用底層的庫(kù)不同,它們計(jì)算出來(lái)的值不完全相同。

#使用numpyX = housing_data_plus_biasy = housing.target.reshape(-1,1)theta_numpy = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)#使用sklearnfromsklearn.linear_modelimportLinearRegressionlin_reg = LinearRegression()lin_reg.fit(housing.data, housing.target.reshape(-1,1))

這里不禁感到疑惑,為什么TensorFlow感覺變復(fù)雜了呢?其實(shí),這不過因?yàn)檫@里數(shù)據(jù)規(guī)模較小,進(jìn)行大規(guī)模的計(jì)算時(shí),TensorFlow的自動(dòng)優(yōu)化所發(fā)揮的效果,是十分厲害的。

使用gradient descent(梯度下降)方法求解

#使用gradient時(shí)需要scale一下from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaled_housing_data = scaler.fit_transform(housing.data)scaled_housing_data_plus_bias = np.c_[np.ones((m,1)), scaled_housing_data]#迭代1000次n_epochs =1000learning_rate =0.01#由于使用gradient,寫入x的值需要scale一下X=tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")y=tf.constant(housing.target.reshape(-1,1), dtype=tf.float32, name="y")#使用gradient需要有一個(gè)初值theta =tf.Variable(tf.random_uniform([n +1,1], -1.0,1.0), name="theta")#當(dāng)前預(yù)測(cè)的y,x是m*(n+1),theta是(n+1)*1,剛好是y的維度y_pred =tf.matmul(X, theta, name="predictions")#整體誤差error = y_pred -y#TensorFlow求解均值功能強(qiáng)大,可以指定維數(shù),也可以像下面方法求整體的mse =tf.reduce_mean(tf.square(error), name="mse")#暫時(shí)自己寫出訓(xùn)練過程,實(shí)際可以采用TensorFlow自帶的功能更強(qiáng)大的自動(dòng)求解autodiff方法gradients =2/m*tf.matmul(tf.transpose(X), error)training_op =tf.assign(theta, theta - learning_rate * gradients)#初始化并開始求解init =tf.global_variables_initializer()withtf.Session()assess: sess.run(init) forepoch inrange(n_epochs): #每運(yùn)行100次打印一下當(dāng)前平均誤差 ifepoch %100==0: print("Epoch", epoch,"MSE =", mse.eval()) sess.run(training_op) best_theta = theta.eval()

上述代碼中的autodiff如下,可以自動(dòng)求出gradient

gradients= tf.gradients(mse, [theta])[0]

使用Optimizer

上述的整個(gè)梯度下降和迭代方法,都封裝了在如下方法中

optimizer= tf.train.GradientDescentOptimizer(learning_rate=learning_rate)

training_op= optimizer.minimize(mse)

這樣的optimizer還有很多

例如帶沖量的optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate,momentum=0.9)

Feeding data to training algorithm

當(dāng)數(shù)據(jù)量達(dá)到幾G,幾十G時(shí),使用constant直接導(dǎo)入數(shù)據(jù)顯然是不現(xiàn)實(shí)的,因而我們用placeholder做一個(gè)占位符

(一般行都是none,即數(shù)據(jù)量是任意的)

真正運(yùn)行,run的時(shí)候再feed數(shù)據(jù)。可以不斷使用新的數(shù)據(jù)。

>>>A = tf.placeholder(tf.float32, shape=(None,3))>>>B = A +5>>>withtf.Session()assess:...B_val_1 = B.eval(feed_dict={A: [[1,2,3]]})...B_val_2 = B.eval(feed_dict={A: [[4,5,6], [7,8,9]]})...>>>print(B_val_1)[[6.7.8.]]>>>print(B_val_2)[[9.10.11.][12.13.14.]]

這樣,就可以通過定義min_batch來(lái)分批次隨機(jī)抽取指定數(shù)量的數(shù)據(jù),即便是幾T的數(shù)據(jù)也可以抽取。

batch_size =100n_batches = int(np.ceil(m / batch_size))#有放回的隨機(jī)抽取數(shù)據(jù)deffetch_batch(epoch, batch_index, batch_size): #定義一個(gè)隨機(jī)種子 np.random.seed(epoch * n_batches + batch_index) # not shown in the book indices = np.random.randint(m, size=batch_size) # not shown X_batch = scaled_housing_data_plus_bias[indices]# not shown y_batch = housing.target.reshape(-1,1)[indices]# not shown returnX_batch, y_batch#開始運(yùn)行withtf.Session()assess: sess.run(init)#每次都抽取新的數(shù)據(jù)做訓(xùn)練 forepochinrange(n_epochs): forbatch_indexinrange(n_batches): X_batch, y_batch = fetch_batch(epoch, batch_index, batch_size) sess.run(training_op, feed_dict={X: X_batch, y: y_batch})#最終結(jié)果 best_theta = theta.eval()

Saving and Restoring models(保存模型)

有時(shí)候,運(yùn)行幾天的模型可能因故暫時(shí)無(wú)法繼續(xù)跑下去,因而需要暫時(shí)保持已訓(xùn)練好的部分模型到硬盤上。

init =tf.global_variables_initializer()saver =tf.train.Saver()#保存模型withtf.Session()assess: sess.run(init) forepoch inrange(n_epochs): ifepoch %100==0: #print("Epoch", epoch,"MSE =", mse.eval()) save_path = saver.save(sess,"/tmp/my_model.ckpt") sess.run(training_op) best_theta = theta.eval() save_path = saver.save(sess,"/tmp/my_model_final.ckpt")#恢復(fù)模型withtf.Session()assess: saver.restore(sess,"/tmp/my_model_final.ckpt") best_theta_restored = theta.eval()關(guān)于TensorBoard

眾所周知,神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)大多是黑盒模型,讓人有點(diǎn)忐忑。TensorBoard所起的功能就是將這個(gè)黑盒稍微變白一些~

啟用tensorboard

輸入docker ps查看當(dāng)前容器id

進(jìn)入容器

使用tensorboard --log-dir=tf_logs命令打開已經(jīng)存入的tf_logs文件,其生成代碼如下所示

from datetime import datetimenow = datetime.utcnow().strftime("%Y%m%d%H%M%S")root_logdir ="tf_logs"logdir ="{}/run-{}/".format(root_logdir, now)...mse_summary =tf.summary.scalar('MSE', mse)file_writer =tf.summary.FileWriter(logdir,tf.get_default_graph())...ifbatch_index %10==0: summary_str = mse_summary.eval(feed_dict={X: X_batch,y: y_batch}) step = epoch * n_batches + batch_index file_writer.add_summary(summary_str, step)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8424

    瀏覽量

    132765
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60540

原文標(biāo)題:【機(jī)器學(xué)習(xí)】TensorFlow學(xué)習(xí)(一)

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問ESP32如何運(yùn)行TensorFlow模型?

    請(qǐng)問ESP32如何運(yùn)行TensorFlow模型?
    發(fā)表于 07-09 07:30

    干貨!教你怎么搭建TensorFlow深度學(xué)習(xí)開發(fā)環(huán)境

    TensorFlow1.1.0 版本。TensorFlow安裝過程安裝之前,我們要了解TensorFlow對(duì)系統(tǒng)環(huán)境的要求,以Window
    發(fā)表于 09-27 13:56

    TensorFlow運(yùn)行時(shí)無(wú)法加載本機(jī)

    您好,我想在AI DevCloud的計(jì)算節(jié)點(diǎn)中運(yùn)行TensorFlow時(shí)出錯(cuò)。[u19741 @ c009-n031~] $ pythonPython 3.6.3 |英特爾公司| (默認(rèn),2018年
    發(fā)表于 10-19 12:00

    深度學(xué)習(xí)框架TensorFlow&TensorFlow-GPU詳解

    TensorFlow&TensorFlow-GPU:深度學(xué)習(xí)框架TensorFlow&TensorFlow-GPU的簡(jiǎn)介、安裝、使用方法詳細(xì)攻略
    發(fā)表于 12-25 17:21

    Linux環(huán)境的CPU版本TensorFlow安裝步驟

    Linux環(huán)境下安裝CPU版本的TensorFlow
    發(fā)表于 09-05 09:26

    怎么運(yùn)行Faster RCNN的tensorflow代碼

    如何運(yùn)行Faster RCNN的tensorflow代碼
    發(fā)表于 06-15 09:25

    TensorFlow安裝和下載(超詳細(xì))

    conda 環(huán)境(Windows 調(diào)用 deactivate 命令,MAC/Ubuntu 調(diào)用 source deactivate 命令)。TensorFlow安裝過程解讀分析Google 使用 wheel
    發(fā)表于 07-22 10:25

    第一個(gè)TensorFlow程序(hello world)詳解

    消息(W),具體取決于所使用的計(jì)算機(jī)和操作系統(tǒng),并聲明如果針對(duì)所使用的計(jì)算機(jī)進(jìn)行編譯,代碼運(yùn)行速度可能會(huì)更快: 如果使用 TensorFlow GPU 版本,則還會(huì)獲得一系列介紹設(shè)備的提示消息(I
    發(fā)表于 07-22 10:26

    詳解MCU的運(yùn)行過程

    課程簡(jiǎn)介:本課程基于STM32F103RC講解,通過從MCU上電開始啟動(dòng)開始分析,詳解MCU的運(yùn)行過程,講師“東方青”多年從事開發(fā)經(jīng)驗(yàn)而言,學(xué)習(xí)Cortex-M系列的MCU,我們不僅僅只是會(huì)使用固件
    發(fā)表于 11-03 07:58

    淺析為Windows on Arm設(shè)置Tensorflow的步驟

    Tensorflow在Windows on Arm上本機(jī)運(yùn)行。然而,為了幫助開發(fā)人員使用這些工具,本文展示了如何使用我們?yōu)榇碎_發(fā)的一些修補(bǔ)程序構(gòu)建自己的Tensorflow包。該過程
    發(fā)表于 08-10 15:42

    在Ubuntu 18.04 for Arm上運(yùn)行TensorFlow和PyTorch的Docker映像

    包中已經(jīng)對(duì) AArch64 有一些支持,但用戶可能希望從源代碼編譯所有內(nèi)容。原因包括使用特定工具、針對(duì)不同的運(yùn)行時(shí)環(huán)境以及嘗試從底層庫(kù)改進(jìn)性能。Arm 繼續(xù)努力使 ML on Arm 得到很好的支持
    發(fā)表于 10-14 14:25

    C語(yǔ)言的運(yùn)行環(huán)境運(yùn)行過程

    上機(jī)1 C語(yǔ)言的運(yùn)行環(huán)境運(yùn)行過程
    發(fā)表于 03-21 17:23 ?0次下載

    TensorFlow是什么?如何啟動(dòng)并運(yùn)行TensorFlow

    TensorFlow 是一款用于數(shù)值計(jì)算的強(qiáng)大的開源軟件庫(kù),特別適用于大規(guī)模機(jī)器學(xué)習(xí)的微調(diào)。 它的基本原理很簡(jiǎn)單:首先在 Python 中定義要執(zhí)行的計(jì)算圖(例如圖 9-1),然后 TensorFlow 使用該圖并使用優(yōu)化的 C++ 代碼高效
    的頭像 發(fā)表于 07-29 11:16 ?1.7w次閱讀

    如何基于 ES6 的 JavaScript 進(jìn)行 TensorFlow.js 的開發(fā)

    TensorFlow.js 是 TensorFlow 的 JavaScript 版本,支持 GPU 硬件加速,可以運(yùn)行在 Node.js 或?yàn)g覽器環(huán)境中。它不但支持完全基于 JavaS
    的頭像 發(fā)表于 10-31 11:16 ?3134次閱讀

    在MaaXBoard RT上運(yùn)行幾乎任何TensorFlow模型

    電子發(fā)燒友網(wǎng)站提供《在MaaXBoard RT上運(yùn)行幾乎任何TensorFlow模型.zip》資料免費(fèi)下載
    發(fā)表于 10-31 10:28 ?2次下載
    在MaaXBoard RT上<b class='flag-5'>運(yùn)行</b>幾乎任何<b class='flag-5'>TensorFlow</b>模型
    主站蜘蛛池模板: 中文字幕人妻无码系列第三区| 无人视频在线观看免费播放影院 | 我的年轻漂亮继坶三级| 成人手机在线观看| 青娱乐极品视觉盛宴国产视频| 99视频这里只有精品| 欧美eee114| 冰山高冷受被c到哭np双性| 青青久久网| 国产1000部成人免费视频| 天天躁夜夜踩很很踩2022| 国产色婷亚洲99精品AV在线| 亚州视频一区| 久草色在线| 中文字幕高清在线中文字幕| 欧美巨大巨粗黑人性AAAAAA| 超清无码波多野吉衣与黑人| 视频区 国产 欧美 日韩| 国产精品午夜小视频观看| 亚洲免费视频在线| 快插我我好湿啊公交车上做| np高h肉辣一女多男| 天天色天天综合网| 精品国产乱码久久久久久夜深人妻| 伊人亚洲AV久久无码精品| 母乳女神春日もな| 国产AV国片精品无套内谢无码 | 一级黄色香蕉视频| 女人被躁到高潮嗷嗷叫69| 高hbl双性浪荡古代| 亚洲区 bt下载| 欧洲美女高清一级毛片| 国产亚洲国际精品福利| 67194成网页发布在线观看| 世界上第一个得抑郁症的人是谁| 护士们的母狗| CHINA篮球体育飞机2022网站| 性色爽爱性色爽爱网站| 男子扒开美女尿口做羞羞的事 | 石原莉奈rbd806中文字幕| 久久青草免费91线频观看站街|