99热综合福利导航,久久66日韩,91一二区少妇,久久产国视频,日韩久久久五月精品八区,丰满狐狸精在线电影,一区婷婷久久,日韩欧美另类在线,欧美中文字幕区

星空人工智能技術(shù)網(wǎng)

tensorflow的輕量級工具Canton的使用

新的算法理論不斷涌現(xiàn)的同時,各種深度學(xué)習(xí)框架也不斷出現(xiàn)在人們視野,比如Torch,Caffe等等。TensorFlow是Google開發(fā)的第二代機(jī)器學(xué)習(xí)系統(tǒng),于2015年底開源,成為了新一代流行的機(jī)器學(xué)習(xí)的算法框架。這一章節(jié)我們將學(xué)習(xí)tensorflow的輕量級工具Canton的使用。

Canton是TensorFlow的一個輕量級包裝,專注于直觀的程序化建模和重量分享。它提供了靈活的方式來定義,訓(xùn)練,評估和保存計算模型。詳細(xì)文檔可以參考這個鏈接

安裝
安裝僅限于python3,安裝方式,打開Anaconda Prompt,切換到tensorflow模式(輸入activate tensorflow)。之后,輸入pip install canton進(jìn)行安裝即可。
用法
導(dǎo)入

import tensorflow as tf import canton as ct import numpy as np

 
定義輸入

input_variable=tf.Variable(np.random.normal(loc=0,scale=1,size=[1,256,256,3]).astype(‘float32’))

 
定義三個卷積層
  • conv_0有自己的權(quán)重。
  • conv_1和conv_2共享權(quán)重。 conv = ct.Conv2D(3,16,3) shared_conv = ct.Conv2D(16,16,3) print(conv.weights) print(shared_conv.weights)
     
    ,


ct.Conv2D的第一個參數(shù)是filter的長寬,第二是輸入值,第三個是輸出值。而且這個函數(shù)自帶偏移值b。

 

i = conv(input_variable) i = shared_conv(i) out = shared_conv(i) print(out) loss = tf.reduce_mean(out**2.)

 

這里可以看到只需要簡單調(diào)用就可以實現(xiàn)網(wǎng)絡(luò)層的鏈接。
現(xiàn)在讓我們假設(shè)你只想訓(xùn)練共享層的權(quán)重(保持第一個conv層的權(quán)重不變)那么我們需要使用tf.get_collection(some_keys_you_have_to_remember), or get_layer(‘some_name’).trainable = False。只需要把需要訓(xùn)練的放到optimizer.minimize()即可。

 

# define optimizer opt = tf.train.AdamOptimizer(1e-3) # define train op train_step = opt.minimize(loss,var_list=shared_conv.get_weights())

 

現(xiàn)在就可以使用tensorflow的方式來訓(xùn)練了。

 

sess = ct.get_session() # just the TF Session sess.run(tf.global_variables_initializer()) # initialize all weights for i in range(10): res = sess.run([train_step,loss],feed_dict={}) # you should feed inputs if you have print('loss:',res[1])

 

loss: 3.76966
loss: 3.58365
loss: 3.40627
loss: 3.23731
loss: 3.07659
loss: 2.92387
loss: 2.7789
loss: 2.6414
loss: 2.51115
loss: 2.38784

 
可以看到loss的值在不斷下降,也就是權(quán)重得到了訓(xùn)練。如果想要加入更多的層到模型中,可以進(jìn)行如下操作。

out = shared_conv(out) out = shared_conv(out) # redefine loss loss = tf.reduce_mean(out**2.) # redefine train op (Note: do not redefine the optimizer, which will produce error due to variable scope clashing) train_step = opt.minimize(loss,var_list=shared_conv.get_weights())

 

之后不需要重新初始化變量,因為session一直都沒有關(guān)閉

 

for i in range(10): res = sess.run([train_step,loss],feed_dict={}) print('loss:',res[1])

 

loss: 4.82773
loss: 4.44005
loss: 4.05348
loss: 3.682
loss: 3.33433
loss: 3.01487
loss: 2.72505
loss: 2.4644
loss: 2.23137
loss: 2.02376
你可以看到loss的值,如果你想保存權(quán)重的話,可以進(jìn)行如下操作。

 

shared_conv.save_weights('shared_conv.npy')

 

shared_conv.npy文件里面將存儲兩次間隔的權(quán)重。
如果損失太低,顯示出過度配合的跡象。 假設(shè)想要將權(quán)重恢復(fù)到上一個檢查點

 

shared_conv.load_weights('shared_conv.npy')

 

將會回到先前保存權(quán)值的地方。

 
Can的類的定義

class DoubleConv(ct.Can): def __init__(self): super().__init__() # init base class self.convs = [ct.Conv2D(3,16,3),ct.Conv2D(16,3,3)] # define conv2d cans self.incan(self.convs) # add as subcans def __call__(self,i): i = self.convs[0](i) i = self.convs[1](i) return i

 

因此我們可以定義對象

 

dc = DoubleConv() print(dc.subcans)

 

[]
可以通過函數(shù)得到權(quán)重

 

print(dc.get_weights())

 

[]
也可以像之前一樣訓(xùn)練網(wǎng)絡(luò)。

 

i = dc(input_variable) out = dc(i) # N=2 loss = tf.reduce_mean(out**2.) train_step = opt.minimize(loss, var_list=dc.get_weights()) sess.run(tf.global_variables_initializer()) # init and re-init all the weights (mainly for the optimizer) for i in range(10): res = sess.run([train_step,loss],feed_dict={}) print('loss:',res[1])

 

loss: 6.04884
loss: 5.44523
loss: 4.90349
loss: 4.41841
loss: 3.98473
loss: 3.5973
loss: 3.25126
loss: 2.94217
loss: 2.66599
loss: 2.41911
保存權(quán)值

 

dc.save_weights('test.npy') dc.load_weights('test.npy')

 
Can的真實使用
def DoubleConv2():
    can = ct.Can()
    convs = [ct.Conv2D(3,16,3),ct.Conv2D(16,3,3)]
    def call(i):
        i = convs[0](i)
        i = convs[1](i)
        return i
    can.incan(convs)
    can.set_function(call)
    return can

dc2 = DoubleConv2()
out = dc2(input_variable)

loss = tf.reduce_mean(out**2.)
train_step = opt.minimize(loss, var_list=dc2.get_weights())
sess.run(tf.global_variables_initializer()) # init and re-init all the weights (mainly for the optimizer)
for i in range(10):
    res = sess.run([train_step,loss],feed_dict={})
    print('loss:',res[1])

loss: 2.80366
loss: 2.69145
loss: 2.58286
loss: 2.47786
loss: 2.37641
loss: 2.27852
loss: 2.18415
loss: 2.09326
loss: 2.00581
loss: 1.92172
保存權(quán)值

 

dc.save_weights('test.npy') dc.load_weights('test.npy')

 
更加美觀,便捷的表示(對于chain的cans)
定義
def DoubleConv3():
    c = ct.Can()
    c.add(ct.Conv2D(3,16,3))
    c.add(ct.Conv2D(16,3,3))
    c.chain()
    return c
訓(xùn)練
dc3 = DoubleConv3()
out = dc3(input_variable)

loss = tf.reduce_mean(out**2.)
train_step = opt.minimize(loss, var_list=dc3.get_weights())
sess.run(tf.global_variables_initializer()) # init and re-init all the variables (mainly for the optimizer)
for i in range(10):
    res = sess.run([train_step,loss],feed_dict={})
    print('loss:',res[1])

loss: 2.11142
loss: 2.01924
loss: 1.93045
loss: 1.84502
loss: 1.76294
loss: 1.68418
loss: 1.60869
loss: 1.53641
loss: 1.46729
loss: 1.40125
好了,can的介紹就到這里,可以去創(chuàng)建自己的網(wǎng)絡(luò)流了。

 

星空人工智能技術(shù)網(wǎng) 倡導(dǎo)尊重與保護(hù)知識產(chǎn)權(quán)。如發(fā)現(xiàn)本站文章存在版權(quán)等問題,煩請30天內(nèi)提供版權(quán)疑問、身份證明、版權(quán)證明、聯(lián)系方式等發(fā)郵件至1851688011@qq.com我們將及時溝通與處理。!:首頁 > 新聞 » tensorflow的輕量級工具Canton的使用

()
分享到:

相關(guān)推薦

留言與評論(共有 0 條評論)
   
驗證碼:
浙江省| 兰西县| 安塞县| 马鞍山市| 随州市| 昆明市| 余姚市| 怀集县| 易门县| 黄骅市| 溧水县| 渭源县| 和政县| 喀喇沁旗| 内黄县| 大足县| 西平县| 邓州市| 万荣县| 邢台市| 恩施市| 五大连池市| 临夏县| 商城县| 滕州市| 新竹市| 清水河县| 牟定县| 饶河县| 苍山县| 崇礼县| 左权县| 淅川县| 罗城| 巴彦淖尔市| 永兴县| 瓮安县| 民权县| 安化县| 蕉岭县| 淮北市|