2017-04-27 56 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