把數據放進txt文件中(數據量大的話,就寫一段程序本身把數據自動的寫入txt文件中,任何語言都能實現),數據之間用逗號隔開,最後一列標註數據的標籤(用於分類),好比0,1。每一行表示一個訓練樣本。以下圖所示。網絡
其中前三列表示數據(特徵),最後一列表示數據(特徵)的標籤。注意:標籤須要從0開始編碼!cors
這個過程我就很少說了,如何很是簡單,就是普通的代碼實現,本篇博客的重點在於使用本身的數據,有些須要注意的地方我在後面會作註釋。直接上代碼函數
1 #隱含層參數設置 2 in_units=3 #輸入神經元個數 3 h1_units=5 #隱含層輸出神經元個數 4 5 #第二個隱含層神經元個數 6 h2_units=6 7 8 9 W1=tf.Variable(tf.truncated_normal([in_units,h1_units],stddev=0.1)) #隱含層權重,W初始化爲截斷正態分佈 10 b1=tf.Variable(tf.zeros([h1_units])) #隱含層偏執設置爲0 11 W2=tf.Variable(tf.truncated_normal([h1_units,h2_units],stddev=0.1)) #第二個隱含層權重,W初始化爲截斷正態分佈 12 b2=tf.Variable(tf.zeros([h2_units])) #第二個隱含層偏執設置爲0 13 14 W3=tf.Variable(tf.zeros([h2_units,2])) #輸出層權重和偏執都設置爲0 15 b3=tf.Variable(tf.zeros([2])) 16 17 #定義輸入變量x和dropout比率 18 x=tf.placeholder(tf.float32,[None,3]) #列是 19 keep_prob=tf.placeholder(tf.float32) 20 21 #定義一個隱含層 22 hidden1=tf.nn.relu(tf.matmul(x,W1)+b1) 23 hidden1_drop=tf.nn.dropout(hidden1,keep_prob) 24 25 #定義第二個隱藏層 26 hidden2=tf.nn.relu(tf.matmul(hidden1_drop,W2)+b2) 27 hidden2_drop=tf.nn.dropout(hidden2,keep_prob)
須要注意的地方測試
in_units=3 #輸入神經元個數,和特徵的維度對應起來大數據
x=tf.placeholder(tf.float32,[None,3]) #和特徵的維度對應起來優化
標準的softmax和交叉熵,很少說了。 編碼
1 y=tf.nn.softmax(tf.matmul(hidden2_drop,W3)+b3) 2 3 #定義損失函數和選擇優化器 4 y_=tf.placeholder(tf.float32,[None,2]) #列是2,表示兩類,行表示輸入的訓練樣本個數,None表示不定 5 6 corss_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1])) 7 train_step=tf.train.AdagradOptimizer(0.3).minimize(corss_entropy)
須要注意的地方:spa
y_=tf.placeholder(tf.float32,[None,2]) #有幾類就寫幾,我寫的是兩類,因此就是2code
重點來了,首先從txt中把數據讀取出來,而後對標籤進行獨熱編碼,什麼是獨熱編碼?索引表示類別,是哪一個類別這一維就是非零(用1)。代碼實現:orm
1 data=np.loadtxt('txt.txt',dtype='float',delimiter=',') 2 3 #將樣本標籤轉換成獨熱編碼 4 def label_change(before_label): 5 label_num=len(before_label) 6 change_arr=np.zeros((label_num,2)) #2表示有兩類 7 for i in range(label_num): 8 #該樣本標籤數據要求從0開始 9 change_arr[i,int(before_label[i])]=1 10 return change_arr 11 12 #用於提取數據 13 def train(data): 14 data_train_x=data[:7,:3] #取前幾行做爲訓練數據,7表示前7行,3表示取前三列,排除數據標籤 15 data_train_y=label_change(data[:7,-1]) 16 return data_train_x,data_train_y 17 18 19 data_train_x,data_train_y=train(data)
須要注意的地方在代碼中我都作了註釋,再也不贅述。
訓練部分
1 for i in range(5): #迭代,取batch進行訓練 2 img_batch, label_batch = tf.train.shuffle_batch([data_train_x, data_train_y], #隨機取樣本 3 batch_size=2, 4 num_threads=2, 5 capacity=7, 6 min_after_dequeue=2, 7 enqueue_many=True) 8 coord = tf.train.Coordinator() 9 threads = tf.train.start_queue_runners(coord=coord, sess=sess) 10 11 12 img_batch,label_batch=sess.run([img_batch,label_batch]) 13 14 train_step.run({x:img_batch,y_:label_batch,keep_prob:0.75}
1 #預測部分 2 correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) 3 accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) 4 print(accuracy.eval({x:data_train_x,y_:data_train_y,keep_prob:1.0}))
這樣就所有流程完成。其中網絡結構能夠作相應的修改,核心在於如何從txt中讀取本身的數據輸入到全鏈接神經網絡(多層感知機)中進行訓練和測試。
固然,也能夠在定義變量的時候直接輸入,不用從txt中讀取。即:
1 image=[[1.0,2.0,3.0],[9,8,5],[9,5,6],[7,5,3],[6,12,7],[8,3,6],[2,8,71]] 2 label=[[0,1],[1,0],[1,0],[1,0],[1,0],[0,1],[0,1]] 3 image_test=[[9,9,9]] 4 label_test=[[0,1]]
直接定於數據的話,適合小數據量的狀況,大數據量的狀況並不適用。
好了,本篇博客介紹到此結束。下一篇介紹如何處理圖像數據。