2017-06-17 4 views
0

J'ai deux ensembles de données, ce qui est comme:Structure de données Divergence tensorflow/TFLearn

input: 
array([[[ 0.99309823], 
      ... 
     [ 0.  ]]]) 

shape : (1, 2501) 

output: 
array([[0, 0, 0, ..., 0, 0, 1], 
     ..., 
     [0, 0, 0, ..., 0, 0, 0]]) 
shape : (2501, 9) 

Et je avec TFLearn traitée; comme

input_layer = tflearn.input_data(shape=[None,2501]) 
hidden1 = tflearn.fully_connected(input_layer,1205,activation='ReLU', regularizer='L2', weight_decay=0.001) 
dropout1 = tflearn.dropout(hidden1,0.8) 

hidden2 = tflearn.fully_connected(dropout1,1205,activation='ReLU', regularizer='L2', weight_decay=0.001) 
dropout2 = tflearn.dropout(hidden2,0.8) 
softmax = tflearn.fully_connected(dropout2,9,activation='softmax') 

# Regression with SGD 
sgd = tflearn.SGD(learning_rate=0.1,lr_decay=0.96, decay_step=1000) 
top_k=tflearn.metrics.Top_k(3) 
net = tflearn.regression(softmax,optimizer=sgd,metric=top_k,loss='categorical_crossentropy') 

model = tflearn.DNN(net) 
model.fit(input,output,n_epoch=10,show_metric=True, run_id='dense_model') 

Cela fonctionne mais pas la façon dont je veux. C'est un modèle DNN. Je veux que quand j'entre 0,95, le modèle doit me donner la prédiction correspondante par exemple [0,0,0,0,0,0,0,0,1]. Cependant, quand je veux entrer 0.95, il est dit que,

ValueError: Cannot feed value of shape (1,) for Tensor 'InputData/X:0', which has shape '(?, 2501)' 

Quand j'ai essayé de comprendre je me rends compte que je dois (1,2501) pour prédire les données en forme pour mon modèle à base de mal.

Ce que je veux, c'est pour chaque élément en entrée, prédire l'élément correspondant en sortie. Comme vous pouvez le voir, dans l'ensemble de données d'instance,

pour [0.99309823], la sortie correspondante est [0,0,0,0,0,0,0,0,1]. Je veux m'entraîner comme ça.

Je peux avoir des données structurées incorrectes, ou un modèle (probablement ensemble de données), j'ai expliqué toutes les choses, j'ai besoin d'aide, je suis vraiment hors de mon esprit.

Répondre

1

Vos données d'entrée doivent être Nx1 (N = nombre d'échantillons) pour archiver les dimensions de cette transformation ([0,99309823] -> [0,0,0,0,0,0,0,0,1 ]). Selon votre forme de données d'entrée, il semble plus probable, y compris 1 échantillon avec 2501 dimensions.

  • ValueError: Cannot feed value of shape (1,) for Tensor 'InputData/X:0', which has shape '(?, 2501)' Cette erreur signifie que tensorflow vous attendre à fournir un vecteur de forme (2501), mais on se nourrissent du réseau avec un vecteur de forme (1,).

  • Exemple code modifié avec des données factices:

import numpy as np 
import tflearn 

#creating dummy data 
input_data = np.random.rand(1, 2501) 
input_data = np.transpose(input_data) # now shape is (2501,1) 
output_data = np.random.randint(8, size=2501) 
n_values = 9 
output_data = np.eye(n_values)[output_data] 

# checking the shapes 
print input_data.shape #(2501,1) 
print output_data.shape #(2501,9) 

input_layer = tflearn.input_data(shape=[None,1]) # now network is expecting (Nx1) 
hidden1 = tflearn.fully_connected(input_layer,1205,activation='ReLU', regularizer='L2', weight_decay=0.001) 
dropout1 = tflearn.dropout(hidden1,0.8) 

hidden2 = tflearn.fully_connected(dropout1,1205,activation='ReLU', regularizer='L2', weight_decay=0.001) 
dropout2 = tflearn.dropout(hidden2,0.8) 
softmax = tflearn.fully_connected(dropout2,9,activation='softmax') 

# Regression with SGD 
sgd = tflearn.SGD(learning_rate=0.1,lr_decay=0.96, decay_step=1000) 
top_k=tflearn.metrics.Top_k(3) 
net = tflearn.regression(softmax,optimizer=sgd,metric=top_k,loss='categorical_crossentropy') 
model = tflearn.DNN(net) 
model.fit(input_data, output_data, n_epoch=10,show_metric=True, run_id='dense_model') 
+0

Vous avez raison, merci rcmalli. –

0

Aussi mon ami m'a mis en garde contre même chose que rcmalli. Il dit Reshape:

input = tf.reshape(input, (2501,1)) 

changement

input_layer = tflearn.input_data(shape=[None,2501]) 

à

input_layer = tflearn.input_data(shape=[None, 1]) 

de dimension variable doit être "Aucun". Dans votre mauvais cas, 2501 est l'ampleur (ou quelque chose d'autre, j'ai traduit d'un autre lang., Mais vous l'avez obtenu) de votre ensemble de données. 1 est la grandeur d'entrée constante.