0

に動作しない場合、私はこのコードをPythonとTensorflowで車を運転して自己をプログラムしようとした:文がTensorflow変数

import tensorflow as tf 
from PIL import ImageGrab 
import numpy as np 
import pyautogui as pag 
import time 

x_p = tf.placeholder(tf.uint8) 
y_p = tf.placeholder(tf.float32) 

weights = [tf.Variable(tf.random_normal([5,5,3,32],0.1)), 
      tf.Variable(tf.random_normal([5,5,32,64],0.1)), 
      tf.Variable(tf.random_normal([5,5,64,128],0.1)), 
      tf.Variable(tf.random_normal([25*25*128,1064],0.1)), 
      tf.Variable(tf.random_normal([1064,1],0.1))] 

def CNN(x, weights): 
    output = tf.nn.conv2d(x, weights[0], [1,1,1,1], 'SAME') 
    output = tf.nn.relu(output) 
    output = tf.nn.conv2d(output, weights[1], [1,2,2,1], 'SAME') 
    output = tf.nn.relu(output) 
    output = tf.nn.conv2d(output, weights[2], [1,2,2,1], 'SAME') 
    output = tf.nn.relu(output) 
    output = tf.reshape(output, [-1,25*25*128]) 
    output = tf.matmul(output, weights[3]) 
    output = tf.nn.relu(output) 
    output = tf.matmul(output, weights[4]) 
    output = tf.reduce_sum(output) 
    return output 

prediction = CNN(tf.cast(x_p, tf.float32), weights) 
saver = tf.train.Saver() 
init = tf.global_variables_initializer() 

with tf.Session() as sess: 
    sess.run(init) 
    saver.restore(sess, 'saved/model.ckpt') 
    for t in range(5): 
     print(t+1) 
     time.sleep(1) 

    while True: 
     x = ImageGrab.grab() 
     x = x.resize((100,100)) 
     x = np.asarray(x) 
     output = sess.run(prediction, feed_dict={x_p:[x]}) 
     print(output) 
     if output < 0.5 and output > 1.5: 
      pag.keyDown('W') 
      pag.keyUp('S') 
      pag.keyUp('D') 
      pag.keyUp('A') 
     elif output < 1.5 and output > 2.5: 
      pag.keyUp('W') 
      pag.keyDown('S') 
      pag.keyUp('D') 
      pag.keyUp('A') 
     elif output < 2.5 and output > 3.5: 
      pag.keyDown('W') 
      pag.keyUp('S') 
      pag.keyDown('D') 
      pag.keyUp('A') 
     elif output < 3.5 and output > 4.5: 
      pag.keyDown('W') 
      pag.keyUp('S') 
      pag.keyUp('D') 
      pag.keyDown('A') 
     elif output < 4.5 and output > 5.5: 
      pag.keyDown('W') 
      pag.keyUp('S') 
      pag.keyDown('D') 
      pag.keyUp('A') 
     elif output < 5.5 and output > 6.5: 
      pag.keyDown('W') 
      pag.keyUp('S') 
      pag.keyUp('D') 
      pag.keyDown('A') 
     elif output < 6.5 and output > 7.5: 
      pag.keyUp('W') 
      pag.keyDown('S') 
      pag.keyDown('D') 
      pag.keyUp('A') 
     elif output < 7.5 and output > 8.5: 
      pag.keyUp('W') 
      pag.keyDown('S') 
      pag.keyUp('D') 
      pag.keyDown('A') 
     else: 
      pag.keyUp('W') 
      pag.keyUp('S') 
      pag.keyUp('D') 
      pag.keyUp('A') 

しかし、問題は、出力が持っているにもかかわらず、唯一のELSE文火災ということです(例えば)1.3という値になります。私は問題がif文の変数出力によって引き起こされていることを知ることができましたが、問題を解決できませんでした。

+3

あなたのロジックは欠陥がある:

問題は、私はあなたが書きたいと思います他のすべてのelif

でも同じです。数字は同時に1.5未満で2.5よりも大きいことができますか?私はあなたが 'elif 1.5 Carcigenicate

答えて

0

if文に問題があります。

if output < 0.5 and output > 1.5: 

あなたの出力は0.5に劣ることはありませんし、同時に1.5よりも優れていることはありません。 if文は常に間違っています。

if output > 0.5 and output < 1.5: 
+0

私はそれを変更しましたが、問題はまだそこにあります –

+0

あなたはすべてのエリフも変更しましたか? –

+0

何でも、新しいif文で、あなたの出力(印刷された)が1.3なら、それはそれに入るべきです! –