Tensorflow Tensor out of CSV没有大小?

时间:2018-09-16 14:56:35

标签: tensorflow

我只是无法从该死的张量“数据”中获得任何尺寸(大小,长度)。这是代码和错误消息:

import tensorflow as tf
import numpy as np
import tflearn
import pandas as pd
from tensorflow import keras
file = 'some.csv'
record_defaults = [tf.float64]*18
from tflearn.data_utils import load_csv
data , label = load_csv(file, target_column=0,has_header=True,
                    categorical_labels=True, n_classes=50)

datatens = tf.data.Dataset.from_tensor_slices((data,label))
print(datatens.get_shape().as_list())

错误:

<TensorSliceDataset shapes: ((17,), (50,)), types: (tf.string, tf.float64)>
Traceback (most recent call last):
File "basic_class.m", line 44, in <module>
print(datatens.get_shape().as_list())
AttributeError: 'TensorSliceDataset' object has no attribute 'get_shape'

关注度:

在急切地执行了好奇的执行之后,为什么我的张量是整数而不是浮点数。这是建议代码的输出。

代码:

print(tf.shape(data))
print(tf.shape(label))

输出:

Tensor("Shape:0", shape=(2,), dtype=int32)
Tensor("Shape_1:0", shape=(2,), dtype=int32)

1 个答案:

答案 0 :(得分:0)

调用tf.data.Dataset.from_tensor_slices时会得到dataset,而不是张量。数据集本质上是张量的容器,您可以通过几种方式访问​​它的张量。

最简单的方法是调用数据集的make_one_shot_iterator方法。这将返回遍历张量的迭代器。关于数据集和迭代器的最佳文档是here

确定要致电tf.data.Dataset.from_tensor_slices吗? datalabel还不是张量吗?

编辑:

如果要验证包含标签的张量,请尝试以下代码:

import tensorflow as tf
import numpy as np
import tflearn
import pandas as pd
from tensorflow import keras
from tflearn.data_utils import load_csv

tf.enable_eager_execution()
file = 'some.csv'
record_defaults = [tf.float64]*18
data, label = load_csv(file, target_column=0,has_header=True,
                    categorical_labels=True, n_classes=50)
print(tf.shape(label))

启用急切执行很重要,因为它使您无需创建和运行会话即可访问张量。