TensorFlow和keras基礎使用

在jupyter nootbook中編輯和運行

一 TensorFlow

步驟:

。import tensorflow as tf

 

二。載入數據

(數據分批)

 

三。定義placeholder(之後傳入訓練集)

x = tf.placeholder(tf.float32, [維度], name = "")

四。定義結構和參數(w,b)

寫出預測函數z = (激活函數(wx + b))

可以進行dropout(防止過擬合)

第四步每一層神經網絡都要定義一次(最後一層的激活函數一般和前面不一樣)

w = tf.Variable(tf.zeros([]))

wx_plus_b = tf.matmul(w, x) + b

L1 = tf.nn.激活函數(wx_plus_b) (最後一層命名爲prediction)

#dropout

keep_prob=tf.placeholder(tf.float32)(或直接定義爲一個常數)

L1_drop = tf.nn.dropout(L1,keep_prob)

五。定義代價函數(二次代價函數,交叉熵代價函數)

loss = tf.reduce_mean(tf.square(y-prediction))(二次代價函數)(下面是交叉熵代價函數)

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))

或tf.nn.sigmoid_cross_entropy_with_logits

prediction是預測函數(不帶激活函數(softmax或sigmoid,一般最後一層都用這兩個),因爲這個函數裏做了)

(tf.reduce_mean是求平均值)

六。優化器訓練,定義學習率(隨機梯度下降等很多)

train_step = tf.nn.GradientDescentOptimizer(0.5).minimize(loss)

tf.nn.AdadeltaOptimizer()

tf.nn.adagradOptimizer()

....很多種優化方法

 

七。求準確率

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))

#argmax返回一維張量中最大的值所在的位置,tf.equal判斷相等

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

 

八。初始化變量

init = tf.global_variabies_initializer()

 

。with tf.Session as sess:

sess.run(init)

for epoch in range(51):#訓練51次

sess.run([] ,feed_dict = {x: , y: })

#[]裏寫要運行的OP,如train_step. 後面feed值。

這個函數可以有返回值,返回值爲OP的執行結果。如果OP是一個元素就返回一個值;

若OP是一個list,則返回list的值,若OP是一個字典類型,則返回和OP同keys的字典。

acc = sess.run(accury, feed_dict = {})

print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))

可優化的地方

1.數據分批方式

2.訓練數據多少

3.換激活函數

4.增加神經元和網絡層數

5.加dropout(調整dropout的參數keep_prob)或正則化

6.學習率

7.換優化方式

8.訓練次數增多

 

 

使用tensorBoard做網絡可視化

1.每個部分(基本上按照前面的步驟分塊)前面加命名空間,裏面可以再加子空間

with tf.name_scope('自己定義空間名'):

with tf.name_scope(''):(placeholder和variable要加name參數,別的不用)

x = placeholder(tf.float32,[None,10],name = "x_input")

 

2.最後的with tf.Session() as sess:裏面加:

writer = tf.summary.FileWriter('logs/(自己定義路徑和文件夾)',sess.graph)

 

3.運行,打開命令提示符窗口cmd,輸入d: (轉到d盤)

tensorboard --logdir=路徑,(路徑就是剛纔定義的logs文件夾位置,沒定義路徑自動在項目文件夾裏面)

然後用谷歌瀏覽器(不要360)打開給的網址

 

改動程序後,要把文件刪了,然後要選restart clearOutput。

 

繪圖:

tf.summary.scalar("", w) 求a參數的標量圖(變化圖)

tf.summary.histogram("",w) 直方圖

可以求loss和accuracy的標量圖,w和b的標量圖

 

最後加一句 合併所有的summary

merged = tf.summary.merge_all()

 

在with裏面sess.run(train_step, feed_dict={x:batch_xs, y:batch_ys})這句話改成:

summary, _ = sess.run([merged, train_step],feed_dict={x:batch_xs, y:batch_ys})

writer.add_summary(summary)

二 Keras

model = Sequential()

 

#第一層(輸入層)

model.add(Dense(input_dim = 28*28, output_dim = 500))

model.add(Activation('sigmoid'))

#第二層

model.add(Dense(output_dim = 500))

model.add(Activation('sigmoid'))

#第三層(輸出層)

model.add(Dense(output_dim = 10))

model.add(Activation('softmax'))

 

#損失函數和優化器

model.compile(loss = 'mse',

optimizer = SGD(lr = 0.1),

metrics = ['accuracy'])

#訓練

model.fit(x_train, y_train, batch_size = 100, nb_epoch = 20)

#測試

score = model.evaluate(x_text, y_text)

print('Total loss on Testing Set:', score[0])

print('Accuracy of Testing Set:', score[1])

#應用預測

result = model.predict(x_test)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章