2017-04-27 1 views
0

Je crée un réseau de neurones pour jouer à Tic Tac Toe. J'utilise tflearn pour le réseau de neurones. Ce sont les données de formation que j'utiliseErreur TFlearn alimentant une forme comme une entrée

[[[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]] 

Il contient l'état actuel du conseil une liste de 9 numéros et la mise en place du numéro 1 pièce. J'ai séparé le tableau et le placement dans les données et les étiquettes. Quand je nourris les données dans le réseau nerual je reçois cette erreur

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

Voici le code que j'utilise pour créer et former le modèle

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') 

Répondre

1

Dans votre ligne 2 vous avez écrit

Cela crée un espace réservé TensorFlow avec la forme spécifiée qui est (Aucun, 30, 9) où Aucun représente la taille de lot.

Toutefois, lorsque vous fournissez votre entrée dans cette ligne

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

vous fournissez une forme de (30, 9) qui ne correspond pas à la forme de l'espace réservé créé par la fonction input_data. Donc, je vous suggère d'importer numpy et ajoutez cette ligne avant model.fit

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

Ce remodèle votre tableau dans la forme prévue par l'espace réservé. qui est (batch_size, 30, 9)

+0

Lorsque je change cela j'ai une erreur de flux différente: ValueError: Impossible d'alimenter la valeur de forme (1,) pour Tensor u'targets/Y: 0 ', qui a la forme' (?, 9) ' – Loanb222

+0

Vous obtenez la nouvelle erreur car vous avez le même problème avec les cibles aussi. Vous avez déjà résolu l'erreur précédente. Pour résoudre ce nouveau je vous suggère d'inclure y = np.reshape (y, (- 1,9)) avant le model.fit – satyajith