国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 輕松實現TensorFlow微信跳一跳的AI

輕松實現TensorFlow微信跳一跳的AI

2021-01-01 00:07zhanys_7 Python

這篇文章主要教大家如何輕松實現TensorFlow微信跳一跳的AI,具有一定的參考價值,感興趣的小伙伴們可以參考一下

作為python和機器學習的初學者,目睹了AI玩游戲的各種風騷操作,心里也是躍躍欲試。

然后發現微信跳一跳很符合需求,因為它不需要處理連續畫面(截屏太慢了)和復雜的操作,很適合拿來練手。于是…這個東西誕生了,目前它一般都可以跳到100多分,發揮好了能上200。

1.需要設備:

Android手機,數據線
ADB環境
Python環境(本例使用3.6.1)
TensorFlow(本例使用1.0.0)

2.大致原理

使用adb模擬點擊和截屏,使用兩層卷積神經網絡作為訓練模型,截屏圖片作為輸入,按壓毫秒數直接作為為輸出。

3.訓練過程

最開始想的用強化學習,然后發現讓它自己去玩成功率太!低!了!,加上每次截屏需要大量時間,就放棄了這個方法,于是考慮用自己玩的數據作為樣本喂給它,這樣就需要知道每次按壓的時間。

我是這樣做的,找一個手機寫個app監聽按壓屏幕時間,另一個手機玩游戲,然后兩個手指同時按兩個手機o(╯□╰)o

4.上代碼

首先,搭建模型:

第一層卷積:5*5的卷積核,12個featuremap,此時形狀為96*96*12
池化層:4*4 max pooling,此時形狀為24*24*12
第二層卷積:5*5的卷積核,24個featuremap,此時形狀為20*20*24
池化層:4*4 max pooling,此時形狀為5*5*24
全連接層:5*5*24連接到32個節點,使用relu激活函數和0.4的dropout率
輸出:32個節點連接到1個節點,此節點就代表按壓的時間(單位s)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 輸入:100*100的灰度圖片,前面的None是batch size,這里都為1
x = tf.placeholder(tf.float32, shape=[None, 100, 100, 1])
# 輸出:一個浮點數,就是按壓時間,單位s
y_ = tf.placeholder(tf.float32, shape=[None, 1])
 
# 第一層卷積 12個feature map
W_conv1 = weight_variable([5, 5, 1, 12], 0.1)
b_conv1 = bias_variable([12], 0.1)
# 卷積后為96*96*12
 
h_conv1 = tf.nn.relu(conv2d(x, W_conv1) + b_conv1)
h_pool1 = max_pool_4x4(h_conv1)
# 池化后為24*24*12
 
# 第二層卷積 24個feature map
W_conv2 = weight_variable([5, 5, 12, 24], 0.1)
b_conv2 = bias_variable([24], 0.1)
# 卷積后為20*20*24
 
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_4x4(h_conv2)
# 池化后為5*5*24
 
# 全連接層5*5*24 --> 32
W_fc1 = weight_variable([5 * 5 * 24, 32], 0.1)
b_fc1 = bias_variable([32], 0.1)
h_pool2_flat = tf.reshape(h_pool2, [-1, 5 * 5 * 24])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
 
# drapout,play時為1訓練時為0.6
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
# 學習率
learn_rate = tf.placeholder(tf.float32)
 
# 32 --> 1
W_fc2 = weight_variable([32, 1], 0.1)
b_fc2 = bias_variable([1], 0.1)
y_fc2 = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
 
# 因輸出直接是時間值,而不是分類概率,所以用平方損失
cross_entropy = tf.reduce_mean(tf.square(y_fc2 - y_))
train_step = tf.train.AdamOptimizer(learn_rate).minimize(cross_entropy)

其次,獲取屏幕截圖并轉換為模型輸入:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 獲取屏幕截圖并轉換為模型的輸入
def get_screen_shot():
  # 使用adb命令截圖并獲取圖片,這里如果把后綴改成jpg會導致TensorFlow讀不出來
  os.system('adb shell screencap -p /sdcard/jump_temp.png')
  os.system('adb pull /sdcard/jump_temp.png .')
  # 使用PIL處理圖片,并轉為jpg
  im = Image.open(r"./jump_temp.png")
  w, h = im.size
  # 將圖片壓縮,并截取中間部分,截取后為100*100
  im = im.resize((108, 192), Image.ANTIALIAS)
  region = (4, 50, 104, 150)
  im = im.crop(region)
  # 轉換為jpg
  bg = Image.new("RGB", im.size, (255, 255, 255))
  bg.paste(im, im)
  bg.save(r"./jump_temp.jpg")
 
  img_data = tf.image.decode_jpeg(tf.gfile.FastGFile('./jump_temp.jpg', 'rb').read())
  # 使用TensorFlow轉為只有1通道的灰度圖
  img_data_gray = tf.image.rgb_to_grayscale(img_data)
  x_in = np.asarray(img_data_gray.eval(), dtype='float32')
 
  # [0,255]轉為[0,1]浮點
  for i in range(len(x_in)):
    for j in range(len(x_in[i])):
      x_in[i][j][0] /= 255
 
  # 因為輸入shape有batch維度,所以還要套一層
  return [x_in]

以上代碼過程大概是這樣:

輕松實現TensorFlow微信跳一跳的AI

最后,開始訓練:

?
1
2
3
4
5
6
7
8
9
10
11
while True:
 
  …………
 
  # 每訓練100個保存一次
  if train_count % 100 == 0:
    saver_init.save(sess, "./save/mode.mod")
 
  …………  
  
  sess.run(train_step, feed_dict={x: x_in, y_: y_out, keep_prob: 0.6, learn_rate: 0.00005})

訓練所用數據是直接從采集好的文件中讀取的,由于樣本有限(目前采集了800張圖和對應800個按壓時間,在github上train_data文件夾里),并且學習率太大又會震蕩,只能用較小學習率反復學習這些圖片。

5.總結

1.樣本的按壓時間大都分布在300ms到900ms之間,剛開始訓練的時候發現不論什么輸入,輸出都一直很謹慎的停留在600左右,還以為這種方法不可行。不過半個小時后再看發現已經有效果了,對于不同的輸入,輸出值差距開始變大了。所以…相信卷積網絡的威力,多給它點耐心。

2.由于我自己最多玩到100多分,后面的數據沒法采集到,所以當后面物體變得越來越小時,這個AI也會變得容易掛掉。理論上說讓它自己探索不會有這個瓶頸,只是截屏時間實在難以忍受。

3.目前還是初級的版本,有很多可以優化的地方,比如說識別左上角的分數,如果某次跳躍得分較高,那么可以把這次的學習率增大;檢測特殊物體,比如超市音樂盒,就停留幾秒再進行下一次跳躍,等等。

下面是github地址,源碼加注釋總共不到300行:
https://github.com/zhanyongsheng/LetsJump

原文鏈接:http://blog.csdn.net/zhanys_7/article/details/78940763

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩影院在线 | 中文字幕网站 | 亚洲欧美日韩精品久久亚洲区 | 99精品欧美一区二区三区综合在线 | 中文字幕在线精品 | 久久久久久久国产视频 | 黄色一级视频在线观看 | 国产精品视频专区 | 久久久一区二区三区 | 毛片免费在线播放 | 久久免费看少妇a高潮一片黄特 | 午夜午夜精品一区二区三区文 | 日韩中文在线 | 亚洲一区中文字幕在线观看 | 午夜剧场免费在线观看 | 欧美综合成人网 | 亚洲国产91 | 能直接看的av网站 | 久久国产精品一区二区 | 午夜影院免费观看 | 亚洲精品伊人 | 欧美三区二区一区 | 黄毛片网站 | 成人久久18免费观看 | 成人婷婷网色偷偷亚洲男人的天堂 | 亚洲久久一区二区 | 国产精彩视频 | 一区二区久久 | 亚洲精品成人悠悠色影视 | 色爱综合网 | 午夜在线视频 | 亚洲一区二区久久 | 精品久久久久一区二区国产 | 成人九九视频 | 亚洲一区视频在线 | 高清一区二区三区日本久 | 蜜臀精品久久久久久蜜臀 | 国产成人精品免费视频大全最热 | 日韩欧美一区二区三区免费观看 | 97精品国产一区二区三区 | 精品久久久久久国产 |