最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TensorFlow自定義損失函數(shù)來預(yù)測(cè)商品銷售量

 更新時(shí)間:2020年02月05日 10:14:36   作者:stepondust  
這篇文章主要介紹了TensorFlow自定義損失函數(shù)——預(yù)測(cè)商品銷售量,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在預(yù)測(cè)商品銷量時(shí),如果預(yù)測(cè)多了(預(yù)測(cè)值比真實(shí)銷量大),商家損失的是生產(chǎn)商品的成本;而如果預(yù)測(cè)少了(預(yù)測(cè)值比真實(shí)銷量?。?,損失的則是商品的利潤。因?yàn)橐话闵唐返某杀竞蜕唐返睦麧櫜粫?huì)嚴(yán)格相等,比如如果一個(gè)商品的成本是1元,但是利潤是10元,那么少預(yù)測(cè)一個(gè)就少掙10元;而多預(yù)測(cè)一個(gè)才少掙1元,所以如果神經(jīng)網(wǎng)絡(luò)模型最小化的是均方誤差損失函數(shù),那么很有可能此模型就無法最大化預(yù)期的銷售利潤。

為了最大化預(yù)期利潤,需要將損失函數(shù)和利潤直接聯(lián)系起來,需要注意的是,損失函數(shù)定義的是損失,所以要將利潤最大化,定義的損失函數(shù)應(yīng)該刻畫成本或者代價(jià),下面的公式給出了一個(gè)當(dāng)預(yù)測(cè)多于真實(shí)值和預(yù)測(cè)少于真實(shí)值時(shí)有不同損失系數(shù)的損失函數(shù):

其中,yi為一個(gè)batch中第i個(gè)數(shù)據(jù)的真實(shí)值,yi'為神經(jīng)網(wǎng)絡(luò)得到的預(yù)測(cè)值,a和b是常量,比如在上面介紹的銷量預(yù)測(cè)問題中,a就等于10 (真實(shí)值多于預(yù)測(cè)值的代價(jià)),而b等于1 (真實(shí)值少于預(yù)測(cè)值的代價(jià))。

通過對(duì)這個(gè)自定義損失函數(shù)的優(yōu)化,模型提供的預(yù)測(cè)值更有可能最大化收益,在TensorFlow中,可以通過以下代碼來實(shí)現(xiàn)這個(gè)損失函數(shù):

loss = tf.reduce_sum(tf.where(tf.greater(y_, y), (y_ - y) * loss_less, (y - y_) * loss_more))

①tf.greater函數(shù)的輸入是兩個(gè)張量,此函數(shù)會(huì)比較這兩個(gè)輸入張量中每一個(gè)元素的大小,并返回比較結(jié)果,當(dāng)tf.greater的輸入張量維度不一樣時(shí),TensorFlow會(huì)進(jìn)行類似NumPy廣播操作(broadcasting)的處理;

②tf.where函數(shù)有三個(gè)參數(shù),第一個(gè)為選擇條件,當(dāng)選擇條件為True時(shí),tf.where函數(shù)會(huì)選擇第二個(gè)參數(shù)中的值,否則使用第三個(gè)參數(shù)中的值,需要注意的是,tf.where函數(shù)的判斷和選擇都是在元素級(jí)別進(jìn)行的。

接下來使用一段TensorFlow代碼展示這兩個(gè)函數(shù)的使用:

import tensorflow as tf
v1 = tf.constant([1.0, 2.0, 3.0, 4.0])
v2 = tf.constant([4.0, 3.0, 2.0, 1.0])
with tf.Session() as sess:
 print(sess.run(tf.greater(v1, v2)))
 print(sess.run(tf.where(tf.greater(v1, v2), v1, v2)))
 '''輸出結(jié)果為:
 [False False True True]
 [4. 3. 3. 4.]'''

在了解如何使用這兩個(gè)函數(shù)之后,我們來看一看剛才的預(yù)測(cè)商品銷售量的實(shí)例如何通過具體的TensorFlow代碼實(shí)現(xiàn):

import tensorflow as tf
from numpy.random import RandomState

#聲明wl、W2兩個(gè)變量,通過seed參數(shù)設(shè)定了隨機(jī)種子,這樣可以保證每次運(yùn)行得到的結(jié)果是一樣的
w = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))

x = tf.placeholder(tf.float32, shape=(None, 2), name="x-input")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y-input")

#定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
y = tf.matmul(x, w)

#定義真實(shí)值與預(yù)測(cè)值之間的交叉熵?fù)p失函數(shù),來刻畫真實(shí)值與預(yù)測(cè)值之間的差距
loss_less = 10
loss_more = 1
loss = tf.reduce_sum(tf.where(tf.greater(y_, y), (y_ - y) * loss_less, (y - y_) * loss_more))

#定義反向傳播算法的優(yōu)化方法
train_step = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

#設(shè)置隨機(jī)數(shù)種子
rdm = RandomState(seed=1)
#設(shè)置隨機(jī)數(shù)據(jù)集大小
dataset_size = 128
X = rdm.rand(dataset_size, 2)
'''設(shè)置回歸的正確值為兩個(gè)輸入的和加上一個(gè)隨機(jī)量。
之所以要加上一個(gè)隨機(jī)量是為了加入不可預(yù)測(cè)的噪音,否則不同損失函數(shù)的意義就不大了,因?yàn)椴煌瑩p失函數(shù)都會(huì)在能完全預(yù)測(cè)正確的時(shí)候最低。
一般來說噪音為一個(gè)均值為0的小量,所以這里的噪音設(shè)置為-0.05——0.05的隨機(jī)數(shù)。'''
Y = [[x1 + x2 + rdm.rand()/10.0 -0.05] for x1,x2 in X]

#創(chuàng)建會(huì)話
with tf.Session() as sess:
 #初始化變量
 init_op = tf.global_variables_initializer()
 sess.run(init_op)
 
 print(sess.run(w))
 
 #設(shè)置batch訓(xùn)練數(shù)據(jù)的大小
 batch_size = 8
 #設(shè)置訓(xùn)練得輪數(shù)
 STEPS = 5000
 for i in range(STEPS):
  #每次選取batch_size個(gè)樣本進(jìn)行訓(xùn)練
  start = (i * batch_size) % dataset_size
  end = min(start + batch_size, dataset_size)

  #通過選取的樣本訓(xùn)練神經(jīng)網(wǎng)絡(luò)并更新參數(shù)
  sess.run(train_step, feed_dict={x:X[start:end], y_:Y[start:end]})
 
 print(sess.run(w))
 '''輸出結(jié)果為:
 [[-0.8113182]
 [ 1.4845988]]
 [[1.019347 ]
 [1.0428089]]'''

可以看到參數(shù)w優(yōu)化后,預(yù)測(cè)函數(shù)為1.019347 * x1 + 1.0428089 * x2,顯然是大于實(shí)際的預(yù)測(cè)函數(shù)x1 + x2的,這是因?yàn)槲覀兊膿p失函數(shù)中指定預(yù)測(cè)少了的損失更大(loss_less > loss_more),所以模型會(huì)偏向于預(yù)測(cè)多一點(diǎn)。

如果我們更換代碼,改為:

loss_less = 1
loss_more = 10

那么我們的結(jié)果就會(huì)變?yōu)椋?/p>

[[-0.8113182]
 [ 1.4845988]]
[[0.95561105]
 [0.98101896]]

預(yù)測(cè)函數(shù)變?yōu)榱?.95561105 * x1 + 0.98101896 * x2,可以看到這時(shí)候模型就會(huì)偏向于預(yù)測(cè)少一點(diǎn)。

因此,我們可以得出結(jié)論:對(duì)于相同的神經(jīng)網(wǎng)絡(luò),不同的損失函數(shù)會(huì)對(duì)訓(xùn)練得到的模型產(chǎn)生不同效果。

總結(jié)

以上所述是小編給大家介紹的TensorFlow自定義損失函數(shù)來預(yù)測(cè)商品銷售量,希望對(duì)大家有所幫助!

相關(guān)文章

  • python 實(shí)現(xiàn)二叉搜索樹的四種方法

    python 實(shí)現(xiàn)二叉搜索樹的四種方法

    本文主要介紹了python 實(shí)現(xiàn)二叉搜索樹的四種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python 文件處理注意事項(xiàng)總結(jié)

    Python 文件處理注意事項(xiàng)總結(jié)

    這篇文章主要介紹了Python 文件處理注意事項(xiàng)總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Python作用域用法實(shí)例詳解

    Python作用域用法實(shí)例詳解

    這篇文章主要介紹了Python作用域用法,結(jié)合實(shí)例形式詳細(xì)分析了Python作用域概念,用法與相關(guān)函數(shù)的使用技巧,需要的朋友可以參考下
    2016-03-03
  • 高考要來啦!用Python爬取歷年高考數(shù)據(jù)并分析

    高考要來啦!用Python爬取歷年高考數(shù)據(jù)并分析

    轉(zhuǎn)眼間,高考的日子又要來臨了,不知道高考學(xué)子們準(zhǔn)備的怎么樣了,今天這篇文章簡單且隨意地分析一下高考的一些數(shù)據(jù),需要的朋友可以參考下
    2021-06-06
  • socket連接關(guān)閉問題分析

    socket連接關(guān)閉問題分析

    socket建立連接的時(shí)候是三次握手,這個(gè)大家都很清楚,但是socket關(guān)閉連接的時(shí)候,需要進(jìn)行四次揮手,但很多人對(duì)于這四次揮手的具體流程不清楚,吃了很多虧,本文來為大家進(jìn)行分析
    2022-01-01
  • Python利用Seaborn繪制多標(biāo)簽的混淆矩陣

    Python利用Seaborn繪制多標(biāo)簽的混淆矩陣

    混淆矩陣也稱誤差矩陣,是表示精度評(píng)價(jià)的一種標(biāo)準(zhǔn)格式,用n行n列的矩陣形式來表示。本文將利用Seaborn繪制多標(biāo)簽的混淆矩陣,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • 解決django的template中如果無法引用MEDIA_URL問題

    解決django的template中如果無法引用MEDIA_URL問題

    這篇文章主要介紹了解決django的template中如果無法引用MEDIA_URL問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 使用OpenCV為圖像加水印的教程

    使用OpenCV為圖像加水印的教程

    通過本文學(xué)習(xí)將學(xué)會(huì)如何使用 OpenCV 為多個(gè)圖像添加水印,在 OpenCV 中調(diào)整圖像大小也很方便,對(duì)OpenCV圖像加水印相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-09-09
  • python Tornado框架的使用示例

    python Tornado框架的使用示例

    這篇文章主要介紹了python Tornado框架的使用示例,幫助大家更好的利用python進(jìn)行web開發(fā),感興趣的朋友可以了解下
    2020-10-10
  • python中字符串變二維數(shù)組的實(shí)例講解

    python中字符串變二維數(shù)組的實(shí)例講解

    下面小編就為大家分享一篇python中字符串變二維數(shù)組的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論

沅陵县| 兴海县| 始兴县| 南江县| 南涧| 西城区| 清河县| 毕节市| 玛沁县| 龙海市| 沙湾县| 高唐县| 从江县| 祁阳县| 清原| 安阳县| 甘德县| 榆树市| 武义县| 姚安县| 安义县| 湘潭县| 竹北市| 壶关县| 庐江县| 淅川县| 瑞金市| 佛冈县| 株洲市| 历史| 吴旗县| 平安县| 陆良县| 万山特区| 遵化市| 康马县| 中方县| 赞皇县| 柳江县| 宁河县| 萍乡市|