2017-07-07 4 views
0

J'ai essayé d'entraîner un ensemble de données en utilisant TFLearn implémenter un réseau neuronal convolutif. J'ai un jeu de données de 10 classes avec la taille de l'image est 64 * 32, 3 canaux d'entrée et 2 sorties i.e image détectée/non détectée.TensorFlow/TFLearn: ValueError: Impossible d'alimenter la forme de la forme (64,10) pour Tensor u'target/Y: 0 ', qui a la forme' (?, 2) '

Voici mon code.

# Load the data set 
def read_data(): 
    with open("deep_logo.pickle", 'rb') as f: 
     save = pickle.load(f) 
     X = save['train_dataset'] 
     Y = save['train_labels'] 
     X_test = save['test_dataset'] 
     Y_test = save['test_labels'] 
     del save 

    return [X, X_test], [Y, Y_test] 

def reformat(dataset, labels): 
    dataset = dataset.reshape((-1, 64, 32,3)).astype(np.float32) 
    labels = (np.arange(10) == labels[:, None]).astype(np.float32) 
    return dataset, labels 

dataset, labels = read_data() 
X,Y = reformat(dataset[0], labels[0]) 
X_test, Y_test = reformat(dataset[2], labels[2]) 
print('Training set', X.shape, Y.shape) 
print('Test set', X_test.shape, Y_test.shape)    

#building convolutional layers 

network = input_data(shape=[None, 64, 32, 3],data_preprocessing=img_prep,    
data_augmentation=img_aug) 

network = conv_2d(network, 32, 3, activation='relu') 

network = max_pool_2d(network, 2) 

network = conv_2d(network, 64, 3, activation='relu') 

network = conv_2d(network, 128, 3, activation='relu') 

network = max_pool_2d(network, 2) 

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

network = dropout(network, 0.5) 

# Step 8: Fully-connected neural network with two outputs to make the final 
prediction 
network = fully_connected(network, 2, activation='softmax') 

network = regression(network, optimizer='adam', 
        loss='categorical_crossentropy', 
        learning_rate=0.001) 

# Wrap the network in a model object 
model = tflearn.DNN(network, tensorboard_verbose=0, checkpoint_path='logo- 
classifier.tfl.ckpt') 

# Training it . 100 training passes and monitor it as it goes. 
model.fit(X,Y, n_epoch=100, shuffle=True, validation_set=(X_test, Y_test), 
      show_metric=True, batch_size=64, 
      snapshot_epoch=True, 
      run_id='logo-classifier') 

# Save model when training is complete to a file 
model.save("logo-classifier.tfl") 
print("Network trained and saved as logo-classifier.tfl!") 

je reçois l'erreur suivante

ValueError: Cannot feed value of shape (64, 10) for Tensor 'TargetsData/Y:0', which has shape '(?, 2)'

Je X et X_test avec des paramètres d'images et Y et Y_test avec labeles dans le fichier de conserves au vinaigre. J'ai essayé des solutions de la même question, mais cela n'a pas fonctionné pour moi.

Toute aide serait appericiée.

Merci.

Répondre

0

Vous avez spécifié votre forme de tenseur de sortie comme (?, 2) et vos étiquettes ont la forme (?, 10). Votre étiquette et la forme du tenseur de sortie doivent être identiques.

1

Vous obtenez cette erreur car il y a un décalage entre la forme de ce que vous alimentez et ce que le flux tensoriel attend. Pour résoudre le problème, vous pourriez vouloir remodeler votre Y qui est actuellement en forme (64,10) à (?, 2). Par exemple, vous devez effectuer les opérations suivantes:

Y = np.reshape(Y, (-1, 2))