2017-04-27 58 views
0

我正在創建一個神經網絡來玩井字遊戲。我正在使用tflearn來處理神經網絡。這是我正在使用的訓練數據TFlearn錯誤輸入形狀作爲輸入

[[[1, 1, 1, 0, -1, -1, -1, 0, 0], 6], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 3], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 5], 
        [[1, 1, 1, 0, -1, -1, -1, 0, 0], 2], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 7], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 1], 
        [[0, 0, 1, -1, 1, 0, 1, -1, -1], 4], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 3], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 8], 
        [[0, 0, 1, -1, 1, 0, 1, -1, -1], 5], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 9], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 7], 
        [[0, -1, 1, 0, 1, 0, 1, -1, -1], 9], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 3], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 2], 
        [[0, -1, 1, 0, 1, 0, 1, -1, -1], 5], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 8], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 7], 
        [[1, -1, -1, 0, 1, 0, -1, 0, 1], 2], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 1], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 3], 
        [[1, -1, -1, 0, 1, 0, -1, 0, 1], 5], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 7], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 9], 
        [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 1], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 5], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 3], 
        [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 2], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 7], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 8]] 

它包含當前棋盤狀態9個數字的列表以及棋子1號碼的位置。我把這個板子放在數據和標籤上。當我喂數據到nerual網絡我得到這個錯誤

ValueError: Cannot feed value of shape (30, 9) for Tensor u'input/X:0', which has shape '(?, 30, 9)'

這是我用來創建和訓練模型

def create_model(): 
network = input_data(shape=(None, 30, 9), name='input') 

network = fully_connected(network, 128, activation='relu') 
network = dropout(network, 0.8) 

network = fully_connected(network, 256, activation='relu') 
network = dropout(network, 0.8) 

network = fully_connected(network, 512, activation='relu') 
network = dropout(network, 0.8) 

network = fully_connected(network, 256, activation='relu') 
network = dropout(network, 0.8) 

network = fully_connected(network, 128, activation='relu') 
network = dropout(network, 0.8) 

network = fully_connected(network, 9, activation='linear') 
network = regression(network, optimizer='adam', learning_rate=0.01, loss='mean_square', name='targets') 

model = tflearn.DNN(network, tensorboard_dir='log') 

return model 

def train_model(): 
training_data = [[[1, 1, 1, 0, -1, -1, -1, 0, 0], 6], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 3], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 5], 
       [[1, 1, 1, 0, -1, -1, -1, 0, 0], 2], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 7], [[1, 1, 1, 0, -1, -1, -1, 0, 0], 1], 
       [[0, 0, 1, -1, 1, 0, 1, -1, -1], 4], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 3], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 8], 
       [[0, 0, 1, -1, 1, 0, 1, -1, -1], 5], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 9], [[0, 0, 1, -1, 1, 0, 1, -1, -1], 7], 
       [[0, -1, 1, 0, 1, 0, 1, -1, -1], 9], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 3], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 2], 
       [[0, -1, 1, 0, 1, 0, 1, -1, -1], 5], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 8], [[0, -1, 1, 0, 1, 0, 1, -1, -1], 7], 
       [[1, -1, -1, 0, 1, 0, -1, 0, 1], 2], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 1], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 3], 
       [[1, -1, -1, 0, 1, 0, -1, 0, 1], 5], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 7], [[1, -1, -1, 0, 1, 0, -1, 0, 1], 9], 
       [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 1], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 5], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 3], 
       [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 2], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 7], [[-1, 1, -1, 0, 1, 0, -1, 1, 0], 8]] 
x = [] 
y = [] 

for i in training_data: 
    x.append(i[0]) 
    y.append(i[1]) 

model = create_model() 
model.fit({'input': x}, {'targets': y}, n_epoch=10, snapshot_step=500, show_metric=True, run_id='openai_learning') 

回答

1

在你第2行你寫

代碼
network = input_data(shape=(None, 30, 9), name='input') 

這將創建一個TensorFlow佔位符,它具有指定形狀(無,30,9),其中None表示批量大小。

然而,當你在這一行

model.fit({'input': x}, {'targets': y}, n_epoch=10, snapshot_step=500, show_metric=True, run_id='openai_learning') 

您正在供給的形狀提供您的輸入(30,9),該不匹配由input_data函數創建的佔位符的形狀。因此,我建議您導入numpy的和model.fit

x = np.reshape(x, (-1, 30, 9)) 

這種重塑你的數組由佔位符預期形狀前加入這一行。這是(batch_size,30,9)

+0

當我改變,我得到了一個不同的飼料錯誤:ValueError:不能饋送形狀(1,)的張量u'targets/Y:0',其形狀'( ?,9)' – Loanb222

+0

您正在收到新的錯誤,因爲您也有與目標相同的問題。您已經解決了以前的錯誤。爲了解決這個新問題,我建議你在model.fit之前包含 y = np.reshape(y,( - 1,9)) – satyajith