J'ai essayé d'effectuer une régression en utilisant tflearn et mon propre ensemble de données.
En utilisant tflearn, j'ai essayé d'implémenter un réseau convolutionnel basé sur un exemple en utilisant le jeu de données MNIST. Au lieu d'utiliser l'ensemble de données MNIST, j'ai essayé de remplacer les données de formation et de test par les miennes. Mes données sont lues à partir d'un fichier csv et ont une forme différente des données MNIST. J'ai 255 fonctionnalités qui représentent une grille 15 * 15 et une valeur cible. Dans l'exemple, j'ai remplacé les lignes 24-30 par (et inclus import numpy as np):
#read in train and test csv's where there are 255 features (15*15) and a target
csvTrain = np.genfromtxt('train.csv', delimiter=",")
X = np.array(csvTrain[:, :225]) #225, 15
Y = csvTrain[:,225]
csvTest = np.genfromtxt('test.csv', delimiter=",")
testX = np.array(csvTest[:, :225])
testY = csvTest[:,225]
#reshape features for each instance in to 15*15, targets are just a single number
X = X.reshape([-1,15,15,1])
testX = testX.reshape([-1,15,15,1])
## Building convolutional network
network = input_data(shape=[None, 15, 15, 1], name='input')
J'obtiens l'erreur suivante:
ValueError: impossible de fournir la valeur de la forme (64,) pour le tenseur u'target/Y: 0 ', qui a la forme' (?, 10) '
J'ai essayé différentes combinaisons et j'ai vu un question similaire dans stackoverflow mais je n'ai pas réussi. L'exemple de cette page ne fonctionne pas pour moi et génère une erreur similaire et je ne comprends pas la réponse fournie ou celles fournies par des questions similaires.
Comment utiliser mes propres données?
Dans la ligne 41 de exemple MNIST , vous devez également modifier la taille de sortie 10 en 1 dans network = fully_connected(network, 10, activation='softmax')
en network = fully_connected(network, 1, activation='linear')
. Notez que vous pouvez supprimer le softmax final.
En regardant votre code, il semble que vous ayez une valeur cible Y
, ce qui signifie utiliser la perte L2 avec mean_square
(vous trouverez ici toutes les pertes disponibles):
regression(network, optimizer='adam', learning_rate=0.01,
loss='mean_square', name='target')
Remodelez également Y et Y_test pour avoir la forme (batch_size, 1).
Voici comment analyser l'erreur:
Cannot feed value ... for Tensor 'target/Y'
, Ce qui signifie qu'elle provient de l'argument Y feed_dict .of shape (64,)
alors que le réseau attend une forme (?, 10)
. fully_connected(network, 10, activation='softmax')
retourne une sortie de taille 10fully_connected(network, 1, activation='linear')
Au final, ce n'était pas un bug, mais une mauvaise architecture de modèle .