【问题标题】:Tensorflow skflow, Data seems compatible, Valuerror, Shape errorTensorflow skflow,Data 似乎兼容,Valueerror,Shape 错误
【发布时间】:2016-04-10 18:16:11
【问题描述】:

尝试用 skflow 运行一个非常简单的 nn 分类器。

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

我真的不明白这里有什么问题:(

【问题讨论】:

  • 你用的是什么版本的tensorflow和skflow?
  • tensorflow 0.71 和 skflow 0.10

标签: tensorflow skflow


【解决方案1】:

也许您的数据集的标签是 one-hot 向量。 (在这种情况下,我使用 mnist 数据集。另见https://www.tensorflow.org/versions/r0.7/tutorials/mnist/beginners/index.html

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 假设标签是 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)

请试一试。

【讨论】:

  • 您可能是对的,但是现在,我该如何测试呢?我的数据是 one_hot 编码的,我怎么能告诉 skflow 是这样的?
  • 我认为最好先转换数据格式。例如labels_dense = [np.nonzero(mnist.train.labels[i])[0][0] for i in range(len(mnist.train.labels))](这不是智能代码)
猜你喜欢
  • 2021-05-12
  • 2021-05-29
  • 2016-08-26
  • 2020-08-11
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多