在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)