deep-learning - 当我们进行数据增强时,我们应该训练原始数据点吗?
问题描述
我对数据增强的定义感到困惑。我们应该训练原始数据点和转换后的数据点还是只训练转换后的数据点?如果我们同时训练两者,那么我们将增加数据集的大小,而第二种方法不会。
我在使用函数 RandomResizedCrop 时遇到了这个问题。
'train': transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
如果我们随机调整和裁剪一些数据集的大小,我们实际上并没有增加数据集的大小以进行数据增强。那是对的吗?或者数据增强只需要改变/修改原始数据集而不是增加它的大小?
谢谢。
解决方案
transform.compose 就像预处理图像一样,将一种形式转换为特定的合适形式
在单个图像上应用转换意味着改变它的像素值并且它不会增加数据集的大小
对于更多数据集,您必须执行以下操作:
final_train_data = []
final_target_train = []
for i in tqdm(range(train_x.shape[0])):
final_train_data.append(train_x[i])
final_train_data.append(rotate(train_x[i], angle=45, mode = 'wrap'))
final_train_data.append(np.fliplr(train_x[i]))
final_train_data.append(np.flipud(train_x[i]))
final_train_data.append(random_noise(train_x[i],var=0.2**2))
for j in range(5):
final_target_train.append(train_y[i])
更多细节
推荐阅读
- javascript - RxJs 扩展方法导致额外的 HTTP 调用
- javascript - 如何用 jest 测试 axios 拦截器
- node.js - graphql 订阅和 Socket io/Client 订阅通道的替代方案
- python - Pandas 填写最近日期
- c++ - Range-v3 中是否有办法将元素添加到范围/视图中?
- python - 共享数据集和多个参数上的 ProcessPoolExecutor
- python-3.x - 在 python 中打印一个字符串,就像点阵打印机的工作方式一样
- javascript - 为什么即使结果在没有它的情况下也能在反应中使用 () =>
- html - 请帮助我遇到 4 行 html css 代码的问题
- python - 将包从 python 2 升级到 3 时出现问题