Eva*_*urg 7 dataset python-3.x tensorflow
source_dataset = tf.data.TextLineDataset('primary.csv')
target_dataset = tf.data.TextLineDataset('secondary.csv')
dataset = tf.data.Dataset.zip((source_dataset, target_dataset))
dataset = dataset.shard(10000, 0)
dataset = dataset.map(lambda source, target: (tf.string_to_number(tf.string_split([source], delimiter=',').values, tf.int32),
tf.string_to_number(tf.string_split([target], delimiter=',').values, tf.int32)))
dataset = dataset.map(lambda source, target: (source, tf.concat(([start_token], target), axis=0), tf.concat((target, [end_token]), axis=0)))
dataset = dataset.map(lambda source, target_in, target_out: (source, tf.size(source), target_in, target_out, tf.size(target_in)))
dataset = dataset.shuffle(NUM_SAMPLES) #This is the important line of code
Run Code Online (Sandbox Code Playgroud)
我想完全整理我的整个数据集,但是shuffle()需要抽取大量样本,并且tf.Size()无法使用tf.data.Dataset.
我怎么能正常洗牌?
小智 2
我正在使用 tf.data.FixedLengthRecordDataset() 并遇到了类似的问题。就我而言,我试图只获取一定比例的原始数据。由于我知道所有记录都有固定长度,因此我的解决方法是:
totalBytes = sum([os.path.getsize(os.path.join(filepath, filename)) for filename in os.listdir(filepath)])
numRecordsToTake = tf.cast(0.01 * percentage * totalBytes / bytesPerRecord, tf.int64)
dataset = tf.data.FixedLengthRecordDataset(filenames, recordBytes).take(numRecordsToTake)
Run Code Online (Sandbox Code Playgroud)
对于你的情况,我的建议是直接在 python 中计算“primary.csv”和“secondary.csv”中的记录数。或者,我认为出于您的目的,设置 buffer_size 参数实际上并不需要计算文件数。根据关于 buffer_size 含义的公认答案,大于数据集中元素数量的数字将确保整个数据集中的均匀洗牌。因此,只需输入一个非常大的数字(您认为将超过数据集大小)就可以了。
| 归档时间: |
|
| 查看次数: |
5498 次 |
| 最近记录: |