tf.data.Dataset.from_tensor_slices,张量和渴望模式

Posted

技术标签:

【中文标题】tf.data.Dataset.from_tensor_slices,张量和渴望模式【英文标题】:tf.data.Dataset.from_tensor_slices, tensors and eager mode 【发布时间】:2019-01-20 15:14:20 【问题描述】:

使用鸢尾花数据集示例:

train_ds_url = "http://download.tensorflow.org/data/iris_training.csv"

使用的进口:

import tensorflow as tf
import pandas as pd
import numpy as np
tf.enable_eager_execution()

我下载了数据集,然后我使用pd.read 来表示train_plantfeaturestrain_categories 数组。

categories='Plants'

train_path = tf.keras.utils.get_file(train_ds_url.split('/')[-1], train_ds_url)

train = pd.read_csv(train_path, names=ds_columns, header=0)
train_plantfeatures, train_categories = train, train.pop(categories)

之后我使用tf.contrib.keras.utils.to_categorical 创建分类表示。

y_categorical = tf.contrib.keras.utils.to_categorical(train_categories, num_classes=3)

当我尝试使用tf.data.Datasetfrom_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices((train_plantfeatures, y_categorical))

我收到了:

ValueError: 无法将非矩形 Python 序列转换为张量。

没有 Eager 模式的相同实现可以完美运行。这里是 Colab 示例

【问题讨论】:

【参考方案1】:

from_tensor_slices() 方法接收一个 Numpy 数组作为输入。但在这种情况下,变量 train_plantfeatures 是 Pandas DataFrame

type(train_plantfeatures)
`Out:` pandas.core.frame.DataFrame

要完成这项工作,请添加 .values 以从 Pandas 转换为 Numpy:

dataset = tf.data.Dataset.from_tensor_slices((train_plantfeatures.values,
                                              y_categorical))

test_plantfeatures 变量执行相同操作:

dataset_test = tf.data.Dataset.from_tensor_slices((test_plantfeatures.values, 
                                                   y_categorical_test))

【讨论】:

以上是关于tf.data.Dataset.from_tensor_slices,张量和渴望模式的主要内容,如果未能解决你的问题,请参考以下文章