基於tensorflow的簡單鼠標鍵盤識別


import cv2 as cv
import tensorflow as tf
import numpy as np
import random

##如下爲數據預處理,分類爲cata,總共樣本爲cata*num_batch,總共圖像爲cata*num_img
cata=2 #須要分的類別
num_img=49 #圖像個數
#該函數返回x與y,輸入批量,產生cata*num_batch
def XANDY(num_batch):

x_mouse=np.zeros([num_batch,500,500,1]) #保存鼠標圖片矩陣
x_keyboard=np.zeros([num_batch,500,500,1]) #保存鍵盤圖片矩陣
temp_mouse=random.sample(range(0,num_img),num_batch)
temp_keyboard=random.sample(range(0,num_img),num_batch)
for i in range(num_batch):
img_mouse1 = cv.imread('C:\\Users\\HHQ\\Desktop\\tangjun\\mouse\\data_mouse\\'+str(temp_mouse[i])+'.PNG', cv.IMREAD_GRAYSCALE)
img_mouse=cv.resize(img_mouse1,(500,500))
x_mouse[i,:,:,0]=img_mouse
img_keyboard1 = cv.imread('C:\\Users\\HHQ\\Desktop\\tangjun\\mouse\\data_keyboard\\'+str(temp_keyboard [i])+'.bmp', cv.IMREAD_GRAYSCALE)
img_keyboard = cv.resize(img_keyboard1, (500, 500))
x_keyboard [i,:,:,0] = img_keyboard

xx=np.vstack((x_mouse,x_keyboard))
#表籤中0表示鼠標,1表示鍵盤
y_0=np.zeros([num_batch,1])
y_1=np.ones([num_batch,1])
y_mouse=np.hstack((y_1,y_0))
y_keyboard=np.hstack((y_0,y_1))
yy_=np.vstack((y_mouse,y_keyboard)) #標籤爲二維數組,行保存樣本數量,列保存分類
return xx,yy_





x=tf.placeholder(dtype=tf.float32,shape=[None ,500,500,1])
y_=tf.placeholder(dtype=tf.float32,shape=[None,cata])
#創建卷積
#第一層卷積
W_cov1=tf.Variable(tf.truncated_normal([5,5,1,32],stddev=0.1),dtype=tf.float32)
B_cov1=tf.Variable(tf.truncated_normal([32],stddev=0.1),dtype=tf.float32)
A_cov1=tf.nn.relu(tf.nn.conv2d(x,W_cov1,strides=[1,1,1,1],padding='SAME')+B_cov1)
P_cov1=tf.nn.max_pool(A_cov1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')
#獲得250*250*32維度的圖像

#第二層卷積
W_cov2=tf.Variable(tf.truncated_normal([5,5,32,64],stddev=0.1),dtype=tf.float32)
B_cov2=tf.Variable(tf.truncated_normal([64],stddev=0.1),dtype=tf.float32)
A_cov2=tf.nn.relu(tf.nn.conv2d(P_cov1,W_cov2,strides=[1,1,1,1],padding='SAME')+B_cov2)
# #第三層卷積
# W_cov3=tf.Variable(tf.truncated_normal())




# 創建全鏈接層,識別2物體
w=tf.Variable(tf.zeros([250*250*64,cata]),dtype= tf.float32)
b=tf.Variable(tf.zeros([cata]),dtype=tf.float32)
x_reshape=tf.reshape(A_cov2,[-1,250*250*64])
y=tf.matmul(x_reshape,w)+b

#定義交叉熵,爲了定義損失函數
loss=tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)
# loss=-tf.reduce_mean(y_*tf.log(y))
#定義優化器
# train=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
# train=tf.train.AdagradDAOptimizer(0.01).minimize(loss)
train=tf.train.AdamOptimizer(0.001).minimize(loss)
#定義預測準確率
predict1=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
predict=tf.reduce_mean(tf.cast(predict1,tf.float32))

init=tf.initialize_all_variables()
sess=tf.Session()

sess.run(init)
x_pr,y_pr=XANDY(40)

for i in range(30):
x_ba,y_ba=XANDY(15)
sess.run(train,feed_dict={x:x_ba,y_:y_ba})
accuracy=sess.run(predict, feed_dict={x: x_pr, y_: y_pr})
print('訓練步驟: %d , 訓練精度:%g' %(i,accuracy))

相關文章
相關標籤/搜索