尝试使用张量流数据集为 keras 模型准备 CSV
Trying to get CSV ready for keras model with tensorflow dataset
我已经准备好一个 keras CNN 模型,它需要 [None,20,20,3] 数组作为输入。 (这里的图像大小为 20...)另一方面,我的云存储中确实有一个包含 1200 (20*20*3) 列的 CSV。
我想用 tensorflow 编写一个 ETL 管道,为 csv 中的每一行获取一个 [20,20,3] 形状的张量。
到目前为止我的代码:
我已经工作了好几天了,我很有信心,这个方法最终可能会奏效。
import tensorflow as tf
BATCH_SIZE = 30
tf.enable_eager_execution()
X_csv_path = 'gs://my-bucket/dataX.csv'
X_dataset = tf.data.experimental.make_csv_dataset(X_csv_path, BATCH_SIZE, column_names=range(1200) , header=False)
X_dataset = X_dataset.map(lambda x: tf.stack(list(x.values())))
iterator = X_dataset.make_one_shot_iterator()
image = iterator.get_next()
我希望有一个 [30,1200] 形状,但我仍然得到 1200 个形状 [30] 的张量。我的想法是将每一行读入一个 [1200] 形状的张量,然后将该行重塑为 [20,20,3] 张量来为我的模型提供数据。感谢您的宝贵时间!
tf.data.experimental.make_csv_dataset
创建列数组的 OrderedDict。对于您的任务,我将使用 tf.data.TextLineDataset
。
def parse(filename):
string = tf.strings.split([filename], sep=',').values
return string
dataset = tf.data.TextLineDataset('sample.csv').map(parse).batch(BATCH_SIZE)
for i in dataset:
print(i)
这将输出形状为 (BATCH_SIZE、row_length) 的张量,其中 row_length 是来自 csv 文件的一行。您可以应用任何额外的预处理,具体取决于您的任务
我已经准备好一个 keras CNN 模型,它需要 [None,20,20,3] 数组作为输入。 (这里的图像大小为 20...)另一方面,我的云存储中确实有一个包含 1200 (20*20*3) 列的 CSV。
我想用 tensorflow 编写一个 ETL 管道,为 csv 中的每一行获取一个 [20,20,3] 形状的张量。
到目前为止我的代码:
我已经工作了好几天了,我很有信心,这个方法最终可能会奏效。
import tensorflow as tf
BATCH_SIZE = 30
tf.enable_eager_execution()
X_csv_path = 'gs://my-bucket/dataX.csv'
X_dataset = tf.data.experimental.make_csv_dataset(X_csv_path, BATCH_SIZE, column_names=range(1200) , header=False)
X_dataset = X_dataset.map(lambda x: tf.stack(list(x.values())))
iterator = X_dataset.make_one_shot_iterator()
image = iterator.get_next()
我希望有一个 [30,1200] 形状,但我仍然得到 1200 个形状 [30] 的张量。我的想法是将每一行读入一个 [1200] 形状的张量,然后将该行重塑为 [20,20,3] 张量来为我的模型提供数据。感谢您的宝贵时间!
tf.data.experimental.make_csv_dataset
创建列数组的 OrderedDict。对于您的任务,我将使用 tf.data.TextLineDataset
。
def parse(filename):
string = tf.strings.split([filename], sep=',').values
return string
dataset = tf.data.TextLineDataset('sample.csv').map(parse).batch(BATCH_SIZE)
for i in dataset:
print(i)
这将输出形状为 (BATCH_SIZE、row_length) 的张量,其中 row_length 是来自 csv 文件的一行。您可以应用任何额外的预处理,具体取决于您的任务