Drk*_*Str 2 python training-data tensorflow
我正在尝试从Oxford Flowers 102 数据集中下载数据,并使用 tfds API 将其分成训练集、验证集和测试集。这是我的代码:
# Split numbers
train_split = 60
test_val_split = 20
splits = tfds.Split.ALL.subsplit([train_split,test_val_split, test_val_split])
# TODO: Create a training set, a validation set and a test set.
(training_set, validation_set, test_set), dataset_info = tfds.load('oxford_flowers102', split=splits, as_supervised=True, with_info=True)
Run Code Online (Sandbox Code Playgroud)
问题是,当我打印出来时,dataset_info我得到了以下测试集、训练集和验证集的数字
total_num_examples=8189,
splits={
'test': 6149,
'train': 1020,
'validation': 1020,
},
Run Code Online (Sandbox Code Playgroud)
问题:如何将数据拆分为训练集中的 6149 个数据以及测试和验证集中的 1020 个数据?
小智 5
这似乎是数据集本身的错误。特别是因为数据集的总大小为 8189,而 6149 不是总数的 60%,而是 75%,因此您根本没有执行任何拆分。他们可能以错误的方式标记了分裂。另外,即使当我尝试使用此处描述的不同方式加载数据集(https://github.com/tensorflow/datasets/blob/master/docs/splits.md)时,我也遇到了相同的错误分割。
一个简单的解决方案是将测试集作为训练集传递给模型,反之亦然,但你不会得到你想要的百分比。否则,您可以加载整个数据集(训练+测试+验证),然后自行拆分。
df_all, summary = tfds.load('oxford_flowers102', split='train+test+validation', with_info=True)
# check if the dataset loaded truly contains everything
df_all_length = [i for i,_ in enumerate(df_all)][-1] + 1
print(df_all_length)
>>out: 8189 # length is fine
train_size = int(0.6 * df_all_length)
val_test_size = int(0.2 * df_all_length)
# split whole dataset
df_train = df_all.take(train_size)
df_test = df_all.skip(train_size)
df_valid = df_test.skip(val_test_size)
df_test = df_test.take(val_test_size)
df_train_length = [i for i,_ in enumerate(df_train)][-1] + 1
df_val_length = [i for i,_ in enumerate(df_val)][-1] + 1
df_test_length = [i for i,_ in enumerate(df_test)][-1] + 1
# check sizes
print('Train: ', df_train_length)
print('Validation :', df_valid_length)
print('Test :', df_test_length)
>>out: 4913 #(true 60% of 8189)
>>out: 1638 #(true 20% of 8189)
>>out: 1638
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |