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

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

生活随笔

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

编程问答

TensorFlow搭建简易Wide and Deep 模型

發(fā)布時(shí)間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow搭建简易Wide and Deep 模型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Wide & Deep 模型是谷歌在2016年發(fā)表的論文中所提到的模型。在論文中,谷歌將 LR 模型與 深度神經(jīng)網(wǎng)絡(luò) 結(jié)合在一起作為 Google Play 的推薦獲得了一定的效果。

官方提供的 Wide & Deep 模型的(簡(jiǎn)稱,WD 模型)教程 都是使用 TensorFlow (簡(jiǎn)稱,TF )自帶的函數(shù)來(lái)做的特征工程,并且模型也進(jìn)行了封裝,所以如果要簡(jiǎn)單驗(yàn)證這個(gè)模型的話,自己用tf直接搭建一個(gè)或許是一個(gè)更好的主意。

所以本文就向您展示了如何自己用 TF 搭建一個(gè)結(jié)構(gòu)清晰,定制性更高的 WD 模型。


1.先讓我們來(lái)看看wide_deep模型是如何工作的:

上圖左邊是wide模型,對(duì)于右邊是deep模型。可見(jiàn)wide模型就是一個(gè)RL模型,而右邊的deep網(wǎng)絡(luò)隱藏層有三層,神經(jīng)元個(gè)數(shù)分別為256,128,64。

谷歌教程的圖

?

上面的圖示谷歌教程里,可見(jiàn)最后將wide的輸出和deep的輸出進(jìn)行相加。最后用一個(gè)Relu激活函數(shù),然后輸出最終預(yù)測(cè)。

我自己寫了一個(gè)小小的demo,可以展示這個(gè)過(guò)程,思路還是很清晰的,下面我將用自己的demo來(lái)解釋這個(gè)過(guò)程。

2. demo解析

outline:
我用了三個(gè)函數(shù),分別為:
wide_model:來(lái)建立wide模型
deep_model: 來(lái)建立deep模型
build_w_d : 來(lái)結(jié)合上面二者進(jìn)行預(yù)測(cè)與反向傳播

1. wide_model函數(shù)解析

下面是我的代碼,用的是TensorFlow框架:
我再代碼內(nèi)部已經(jīng)給了一些注釋,有一定解釋作用

def wide_model(data) :#得到數(shù)據(jù)的長(zhǎng)度,即每個(gè)樣例有多少個(gè)輸入len = np.shape(data)[1]#隨機(jī)初始化參數(shù)tf.set_random_seed(1)W = tf.get_variable("W" , [len , 1] , initializer = tf.contrib.layers.xavier_initializer())b = tf.get_variable("b" , [1 , 1] , initializer = tf.zeros_initializer())#前向傳播:Z = tf.add(tf.matmul(data , W) , b)A = tf.nn.relu(Z) #這個(gè)Relu我不知道要不要用。。。# 輸出每個(gè)樣本經(jīng)過(guò)計(jì)算的值output = tf.reshape(A, [-1, 1])return output#======分割線由于不要反向傳播,這里wide就寫完了============

值得注意的是:
1.我用的是隨機(jī)初始化,但是我見(jiàn)過(guò)用修正方式初始化權(quán)重的,我不知道這個(gè)模型,用那種方式是不是會(huì)更好,所以這里可能會(huì)有錯(cuò)誤。
2.對(duì)于前向傳播完成后,是否需要用一個(gè)relu激活函數(shù),我也沒(méi)有查到什么確切的資料,這也是個(gè)問(wèn)題。

2. deep_model函數(shù)解析

這里我只做了個(gè)demo,所以我直接用了和之前圖中一樣的隱藏層網(wǎng)絡(luò)層數(shù)(3層),然后神經(jīng)元節(jié)點(diǎn)數(shù)目,我還是用的參數(shù)形式表示,以便于擴(kuò)展。

下面是我的代碼:

def deep_model(data , hidden1 , hidden2 , hidden3) :len = np.shape(data)[1]#隨機(jī)初始化參數(shù)W1 = tf.get_variable("W1", [len , hidden1], initializer=tf.contrib.layers.xavier_initializer())b1 = tf.get_variable("b1", [hidden1 , 1], initializer=tf.zeros_initializer())W2 = tf.get_variable("W2", [hidden1 , hidden2], initializer=tf.contrib.layers.xavier_initializer())b2 = tf.get_variable("b2", [hidden2 , 1], initializer=tf.zeros_initializer())W3 = tf.get_variable("W3", [hidden2 , hidden3], initializer=tf.contrib.layers.xavier_initializer())b3 = tf.get_variable("b3", [hidden3 , 1], initializer=tf.zeros_initializer())# 前向傳播Z1 = tf.add(tf.matmul(data, W1), b1) # Z1 = np.dot(W1, X) + b1A1 = tf.nn.relu(Z1) # A1 = relu(Z1)Z2 = tf.add(tf.matmul(A1, W2), b2) # Z2 = np.dot(W2, a1) + b2A2 = tf.nn.relu(Z2) # A2 = relu(Z2)Z3 = tf.add(tf.matmul(A2, W3), b3) # Z3 = np.dot(W3,Z2) + b3output = tf.nn.relu(Z3) #這個(gè)Relu我不知道要不要用。。。return output

問(wèn)題:同樣,,,這個(gè)最后的relu我不知道要不要用。

3. build_w_d函數(shù)解釋

下面是代碼:

def build_w_d(deep_input, wide_input, y):dmodel = deep_model(deep_input, 256, 128, 64)wmodel = wide_model(wide_input)#初始化參數(shù)(就是類似于前面函數(shù)的b)central_bias = tf.Variable([np.random.randn()], name="central_bias")# 使用 LR 將兩個(gè)模型組合在一起dmodel_weight = tf.Variable(tf.truncated_normal([1, 1]), name="dmodel_weight")wmodel_weight = tf.Variable(tf.truncated_normal([1, 1]), name="wmodel_weight")#將wide和deep的輸出結(jié)合起來(lái)network = tf.add(tf.matmul(dmodel , dmodel_weight) , tf.matmul(wmodel, wmodel_weight))prediction = tf.add(network, central_bias)#計(jì)算cost函數(shù)cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y , logits=prediction))#反向傳播,用了Adam優(yōu)化train_step = tf.train.AdamOptimizer(0.001).minimize(cost)return train_step , cost , prediction

好了,結(jié)合起來(lái)就是這樣,這展現(xiàn)了wide_deep模型的基本結(jié)構(gòu),當(dāng)然,需要得到一個(gè)很厲害的,應(yīng)用級(jí)的模型的話,還需要很多的優(yōu)化與連接措施。

下面貼出幾個(gè)參考資料:
https://www.tensorflow.org/tutorials/wide_and_deep
https://research.google.com/pubs/pub45413.html
https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html

?

總結(jié)

以上是生活随笔為你收集整理的TensorFlow搭建简易Wide and Deep 模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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