tensorflow筆記

#tensorflow筆記

一個(gè)小例子

#用numpy構(gòu)造數(shù)據(jù)
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1 + 0.3
#tf.Variable定義了一個(gè)變量苗傅,random_uniform表示用隨機(jī)的方式生成變量的初始值
#1表示這個(gè)變量是一維的压状,變量的初始范圍是-1到1
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
#定了變量初始值為0
biases = tf.Variable(tf.zeros([1]))
#預(yù)測(cè)的y勺届,由真實(shí)的數(shù)據(jù)x_data來(lái)表示
y = Weights*x_data + biases
#定義損失函數(shù)缅疟,實(shí)際的y與定義的y_data的差值
loss = tf.reduce_mean(tf.square(y-y_data))
#定義了一個(gè)最原始的優(yōu)化器糙箍,0.5為學(xué)習(xí)率
optimizer = tf.train.GradientDescentOptimizer(0.5)
#用優(yōu)化器減小誤差
train = optimizer.minimize(loss)
#建立了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)盖矫,在使用這個(gè)結(jié)構(gòu)之前大猛,我們必須先初始化所有之前定義的Variable初始化
init = tf.global_variables_initializer()
#用Session來(lái)run每一次training的數(shù)據(jù)
sess = tf.Session()
sess.run(init)
#要訓(xùn)練多少次疼进,就循環(huán)多少次
for step in range(201):
sess.run(train)
if step % 20 == 0:
#每20次訓(xùn)練輸出定義的權(quán)重和偏置值
print(step, sess.run(Weights), sess.run(biases))

Session會(huì)話控制

#定義兩個(gè)矩陣兰迫,tf.constant表示恒量
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2],
   [2]])
#tf.matmul表示矩陣乘法
product = tf.matmul(matrix1,matrix2)
# 兩種Session的打開模式信殊,法1
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()
#法2
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)

Variable 變量

#變量一定要用tf.Variable定義才是變量
#這里定義了變量名為0,變量名為counter汁果,然后打印了變量名字
state = tf.Variable(0, name='counter')
print(state.name)
# 定義常量 one
one = tf.constant(1)
# 定義加法步驟 (注: 此步并沒有直接計(jì)算)
new_value = tf.add(state, one)
# 用tf.assign將 State 更新成為 new_value
update = tf.assign(state, new_value)
# 如果定義 Variable, 就一定要 initialize
# 就是初始化我們定義的變量
init = tf.global_variables_initializer() 
# 使用 Session
with tf.Session() as sess:
    #必須要run一下init激活我們的結(jié)構(gòu)
    sess.run(init)
    for _ in range(3):
        #每run一次update涡拘,state變量就會(huì)加1
        sess.run(update)
        #注意這里直接 print(state) 不起作用
        print(sess.run(state))

Placeholder 傳入值

#在 Tensorflow 中需要定義 placeholder 的 type ,一般為 float32 類型
input1 = tf.placeholder(tf.float32)
nput2 = tf.placeholder(tf.float32)
# mul = multiply 是將input1和input2 做乘法運(yùn)算据德,并輸出為 output 
ouput = tf.multiply(input1, input2)
with tf.Session() as sess:
    # 需要傳入的值放在了feed_dict={} 并一一對(duì)應(yīng)每一個(gè) 
    # input. placeholder 與 feed_dict={} 是綁定在一起出現(xiàn)的
    print(sess.run(ouput, feed_dict={input1: [7.], input2: [2.]}))

添加層 def add_layer()

#定義添加神經(jīng)層的函數(shù)def add_layer(),
#它有四個(gè)參數(shù):輸入值鳄乏、輸入的大小、輸出的大小和激勵(lì)函數(shù)棘利,我們?cè)O(shè)定默認(rèn)的激勵(lì)函數(shù)是None橱野。
def add_layer(inputs, in_size, out_size, activation_function=None):  
    #隨機(jī)變量(normal distribution)會(huì)比全部為0要好很多
    #這里的weights為一個(gè)in_size行, out_size列的隨機(jī)變量矩陣。
    Weights = tf.Variable(tf.random_normal([in_size, out_size]))
    #biases的推薦值不為0善玫,所以我們這里是在0向量的基礎(chǔ)上又加了0.1
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    #定義Wx_plus_b, 即神經(jīng)網(wǎng)絡(luò)未激活的值
    Wx_plus_b = tf.matmul(inputs, Weights) + biases

    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    #返回輸出水援,添加一個(gè)神經(jīng)層的函數(shù)——def add_layer()就定義好了
    return outputs

建造神經(jīng)網(wǎng)絡(luò)

#利用占位符定義我們所需的神經(jīng)網(wǎng)絡(luò)的輸入,訓(xùn)練時(shí)再傳值蝌焚! 
#tf.placeholder()就是代表占位符
#這里的None代表無(wú)論輸入樣本有多少都可以裹唆,因?yàn)檩斎胫挥幸粋€(gè)特征,所以這里是1只洒。
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
#構(gòu)建輸入層1個(gè)许帐、隱藏層10個(gè)、輸出層1個(gè)神經(jīng)元的神經(jīng)網(wǎng)絡(luò)
#雖然有三個(gè)層毕谴,但是只需要定義兩個(gè)層構(gòu)造函數(shù)即可
#用上面的添加層函數(shù)定義隱藏層成畦,激活函數(shù)用relu
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
#定義輸出層距芬,輸出層輸入的數(shù)據(jù)是隱藏層l1的輸出
prediction = add_layer(l1, 10, 1, activation_function=None)
#計(jì)算預(yù)測(cè)值prediction和真實(shí)值的誤差,對(duì)二者差的平方求和再取平均循帐。
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
     reduction_indices=[1]))
#用優(yōu)化器以0.1的效率來(lái)最小化誤差loss框仔。
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
#下面,讓機(jī)器開始學(xué)習(xí)拄养。
#機(jī)器學(xué)習(xí)的內(nèi)容是train_step
#當(dāng)運(yùn)算要用到placeholder時(shí)离斩,就需要feed_dict這個(gè)字典來(lái)指定輸入。
for i in range(1000):
    # training
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    if i % 50 == 0:
        # to see the step improvement
        print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
#預(yù)測(cè)對(duì)應(yīng)x值的y值
prediction_value = sess.run(prediction, feed_dict={xs: x_data})

Classification 分類學(xué)習(xí)

#784表示28x28個(gè)特征瘪匿,即一張圖片由784個(gè)像素構(gòu)成
#相當(dāng)于每個(gè)樣本有784個(gè)輸入
xs = tf.placeholder(tf.float32, [None, 784])
#每張圖片都表示一個(gè)數(shù)字跛梗,所以我們的輸出是數(shù)字0到9,共10類棋弥。
#相對(duì)于每個(gè)樣本有10個(gè)輸出的可能
ys = tf.placeholder(tf.float32, [None, 10])
#調(diào)用add_layer函數(shù)搭建一個(gè)最簡(jiǎn)單的訓(xùn)練網(wǎng)絡(luò)結(jié)構(gòu)核偿,只有輸入層和輸出層。 
prediction = add_layer(xs, 784, 10, activation_function=tf.nn.softmax)
#loss函數(shù)(即最優(yōu)化目標(biāo)函數(shù))選用交叉熵函數(shù)顽染。
#交叉熵用來(lái)衡量預(yù)測(cè)值和真實(shí)值的相似程度漾岳,如果完全相同,它們的交叉熵等于零粉寞。
cross_entropy = tf.reduce_mean(
    -tf.reduce_sum(ys * tf.log(prediction),reduction_indices=[1]))
#優(yōu)化器尼荆,train方法(最優(yōu)化算法)采用梯度下降法。
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
#現(xiàn)在開始train唧垦,每次只取100張圖片耀找,免得數(shù)據(jù)太多訓(xùn)練太慢。
#mnist是原始樣本集
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys})

Dropout 解決 overfitting

#先定義一個(gè)keep_prob
keep_prob = tf.placeholder(tf.float32)
#keep_prob最后在這里使用业崖,表示有50%的結(jié)果不被Dropout掉
#keep_prob即保留概率,即我們要保留的結(jié)果所占比例
sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob: 0.5})
#dropout掉Wx_plus_b的50%的結(jié)果
#Wx_plus_b是我們定義的預(yù)測(cè)值
Wx_plus_b = tf.nn.dropout(Wx_plus_b, keep_prob)

CNN 卷積神經(jīng)網(wǎng)絡(luò)

#定義Weight變量蓄愁,輸入shape双炕,返回變量的參數(shù)。
#其中我們使用tf.truncted_normal產(chǎn)生隨機(jī)變量來(lái)進(jìn)行初始化
def weight_variable(shape): 
    inital=tf.truncted_normal(shape,stddev=0.1)
    return tf.Variable(initial)
#定義biase變量撮抓,輸入shape ,返回變量的一些參數(shù)妇斤。
#其中我們使用tf.constant常量函數(shù)來(lái)進(jìn)行初始化
def bias_variable(shape): 
    initial=tf.constant(0.1,shape=shape) 
    return tf.Variable(initial)
#定義卷積,tf.nn.conv2d函數(shù)是tensoflow里面的二維的卷積函數(shù)
#x是圖片的所有參數(shù)丹拯,W是此卷積層的權(quán)重站超,
#然后定義卷積的步長(zhǎng)strides=[1,1,1,1]值,strides[0]和strides[3]的兩個(gè)1是默認(rèn)值乖酬,
#中間兩個(gè)1代表padding時(shí)在x方向運(yùn)動(dòng)一步死相,y方向運(yùn)動(dòng)一步,padding采用的方式是SAME咬像。
def conv2d(x,W):
    return tf.nn.conv2d(x,W,strides=[1,1,1,1]算撮,padding='SAME') 
#接著定義池化pooling生宛,
#為了得到更多的圖片信息,padding時(shí)我們選的是一次一步肮柜,也就是strides[1]=strides[2]=1陷舅,
#這樣得到的圖片尺寸沒有變化,而我們希望壓縮一下圖片也就是參數(shù)能少一些從而減小系統(tǒng)的復(fù)雜度审洞,
#因此我們采用pooling來(lái)稀疏化參數(shù)莱睁,也就是卷積神經(jīng)網(wǎng)絡(luò)中所謂的下采樣層。
#pooling 有兩種芒澜,一種是最大值池化仰剿,一種是平均值池化,本例采用的是最大值池化tf.max_pool()撰糠。
#池化的核函數(shù)大小為2x2酥馍,因此ksize=[1,2,2,1],步長(zhǎng)為2阅酪,因此strides=[1,2,2,1]:
def max_poo_2x2(x): 
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旨袒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子术辐,更是在濱河造成了極大的恐慌砚尽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辉词,死亡現(xiàn)場(chǎng)離奇詭異必孤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瑞躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門敷搪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人幢哨,你說(shuō)我怎么就攤上這事赡勘。” “怎么了捞镰?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵闸与,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我岸售,道長(zhǎng)践樱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任凸丸,我火速辦了婚禮拷邢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屎慢。我一直安慰自己解孙,他們只是感情好坑填,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弛姜,像睡著了一般脐瑰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廷臼,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天苍在,我揣著相機(jī)與錄音,去河邊找鬼荠商。 笑死寂恬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莱没。 我是一名探鬼主播初肉,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饰躲!你這毒婦竟也來(lái)了牙咏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘹裂,失蹤者是張志新(化名)和其女友劉穎妄壶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寄狼,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丁寄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泊愧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伊磺。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖删咱,靈堂內(nèi)的尸體忽然破棺而出奢浑,到底是詐尸還是另有隱情,我是刑警寧澤腋腮,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站壤蚜,受9級(jí)特大地震影響即寡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袜刷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一聪富、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧著蟹,春花似錦墩蔓、人聲如沸梢莽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昏名。三九已至,卻和暖如春阵面,著一層夾襖步出監(jiān)牢的瞬間轻局,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工样刷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仑扑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓置鼻,卻偏偏與公主長(zhǎng)得像镇饮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箕母,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容