2016-04-10 5 views
1

非常に単純なnnクラシファイアをskflowで実行しようとしています。Tensorflow skflow、データは互換性があります、Valuerror、形状エラー

classifier = skflow.TensorFlowDNNClassifier(
hidden_units=[10, 10, 10], 
n_classes=10, 
batch_size=100, 
learning_rate=0.05) 
print (data.train.images).shape 
print (data.train.labels).shape 
classifier.fit(data.train.images,data.train.labels) 

出力は次のようになります。 (73257、3072) (73257、10)

とエラーは次のとおりです。

in assert_same_rank 
    "Shapes %s and %s must have the same rank" % (self, other)) 
ValueError: Shapes (?, 10) and (?, 10, 10) must have the same rank 

私は実際には問題がここにあるかを理解していない:(

+0

使用しているテンソルのバージョンとskflowのバージョンは何ですか? – user728291

+0

テンソルの流れ0.71 – hmmmbob

+0

テンソルの流れ0.71とskflow 0.10 – hmmmbob

答えて

0

おそらく、あなたのデータセットのラベルはワンホットベクトルです(この場合は、mnistデータセットを使用します)

In [1]: from tensorflow.examples.tutorials.mnist import input_data 

In [2]: mnist = input_data.read_data_sets("MNIST_DATA/", one_hot=True) 
Extracting MNIST_DATA/train-images-idx3-ubyte.gz 
Extracting MNIST_DATA/train-labels-idx1-ubyte.gz 
Extracting MNIST_DATA/t10k-images-idx3-ubyte.gz 
Extracting MNIST_DATA/t10k-labels-idx1-ubyte.gz 

In [3]: mnist.train.labels 
Out[3]: 
array([[ 0., 0., 0., ..., 1., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     ..., 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 1., 0.]]) 

In [4]: mnist.train.labels.shape 
Out[4]: (55000, 10) 

In [5]: import skflow 

In [6]: classifier = skflow.TensorFlowDNNClassifier(hidden_units=[10, 10, 10], n_classes=10, batch_size=100, learning_rate=0.05) 

In [7]: classifier.fit(mnist.train.images, mnist.train.labels) 

次に同じエラーが発生します。

ValueError: Shapes (?, 10) and (?, 10, 10) must have the same rank 

しかしskflow lablesは、0から9(one_hot = False)が

In [5]: mnist = input_data.read_data_sets("MNIST_DATA/", one_hot=False) 
Extracting MNIST_DATA/train-images-idx3-ubyte.gz 
Extracting MNIST_DATA/train-labels-idx1-ubyte.gz 
Extracting MNIST_DATA/t10k-images-idx3-ubyte.gz 
Extracting MNIST_DATA/t10k-labels-idx1-ubyte.gz 

In [6]: mnist.train.labels 
Out[6]: array([7, 3, 4, ..., 5, 6, 8], dtype=uint8) 

In [7]: classifier.fit(mnist.train.images, mnist.train.labels) 
Step #99, avg. train loss: 2.31658 
Step #199, avg. train loss: 1.63361 
Out[7]: 
TensorFlowDNNClassifier(batch_size=100, class_weight=None, 
      config_addon=<skflow.addons.config_addon.ConfigAddon object at 0x11cf7eb90>, 
      continue_training=False, hidden_units=[10, 10, 10], 
      keep_checkpoint_every_n_hours=10000, learning_rate=0.05, 
      max_to_keep=5, n_classes=10, optimizer='SGD', steps=200, 
      tf_master='', tf_random_seed=42, verbose=1) 

間の数字、それを試してみてくださいしていることを前提としています。

+0

あなたが正しいかもしれませんが、今、どうすればテストできますか?私のデータはone_hotでエンコードされていますが、どうすればskflowにそのことを伝えることができますか? – hmmmbob

+0

私はそれ以前にデータを変換する方が良いと思います。たとえば、範囲内のi(len(mnist.train.labels))] ''に対しては 'labels_dense = [np.nonzero(mnist.train.labels [i])[0] [0]'(スマートコードではありません) – satojkovic

関連する問題