前言

前段时间,在微信朋友圈内看到有朋友在打比赛,然后,我就抱着尝试的心态去参加了一把;一个人成队,就报名参加了。

比赛截止到7月26号,本人被其他参赛队伍吊打!哈哈哈哈!

这篇文章主要是分享一下本人参赛时用于数据预处理的脚本,自己记录一下,也供大家学习参考![本人被各位大佬吊打之后,最终的成绩如下图,由于工作比较忙(zi ji lan),就只提交了两次成绩]

- 比赛中,数据处理的步骤

  • 数据共计三大类,alpah、beta、betax,并且原始数据量不算很多,因此,首先想到的就是进行数据增强操作;
  • 在三大类别里面,还分了很多的不同的子观测对象,因此,为了适当的让数据均衡,那么就先将大类中的数据按照不同观测对象统一分离好;
  • 子类分离好后,然后再进行数据增强;数据增强方法采用水平镜像旋转、顺时针90度旋转以及缩放比例不是很大的图像缩放;
  • 子类数据增强后,先进行训练、测试、验证数据集的划分;然后再把所有子类数据合并,合并成一个大类;
  • 合并好后,就直接train起来! (本人在比赛中,使用的是resnet50网络进行的训练,网络未做任何调整,训练策略为常规操作)
    (这里要是本人没有描述不清楚,欢迎留言进行交流!!互相学习)

- 接下来直接上代码,代码应该更加能表达清楚上文的描述

[请注意,为了让更加清楚的描述过程,本文中的代码只是针对一个类别的文件夹进行的操作,若是想一步到位三个文件夹都搞定,将代码简单修改一下即可]
首先是将天文观测图.fits数据格式转换为.jpg数据格式
  • fits_to_jpg.py
# coding: utf-8
# author:hxy
"""
fits图片转jpg图片
"""
import os
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from astropy.io import fitsmatplotlib.use('Agg')def transfer(fits_folder, jpg_folder):files = os.listdir(fits_folder)for file in files:jpg_name = file + '.jpg'file_full_path = os.path.join(fits_folder, file)datas = fits.open(file_full_path, cache=True)datas.verify('fix')img_data_aia = np.flipud(datas[1].data)plt.gca().xaxis.set_major_locator(plt.NullLocator())plt.gca().yaxis.set_major_locator(plt.NullLocator())plt.axis('off')plt.imshow(img_data_aia, cmap='gray')plt.savefig(os.path.join(jpg_folder, jpg_name), bbox_inches='tight', dpi=300, pad_inches=0.0)plt.close()if __name__ == '__main__':transfer('./continuum','./continuum_jpg')
然后进行子类的分离
  • split_sub_objects.py
# coding: utf-8
# author: hxy
"""
根据观测对象来归类数据集;
"""
import os
import shutildef split_dataset(ori_datafloder):files = os.listdir(ori_datafloder)for file in files:object_name = file.split('.')[2]dir_name = object_namejpg_full_path = os.path.join(ori_datafloder, file)if not os.path.exists(os.path.join(ori_datafloder, object_name)):os.mkdir(os.path.join(ori_datafloder, object_name))if object_name == dir_name:shutil.copy(jpg_full_path, os.path.join(os.path.join(ori_datafloder, object_name), file))if __name__ == '__main__':split_dataset('./continuum/alpha_jpg')
子类分离好后就开始数据集数据增强,数据增强采用第三方package实现–augmentor
  • data_aug.py
# coding: utf-8
# author: hxy
"""
使用第三方库: augmentor
数据增强的脚本;
"""
import os
import time
import Augmentordef dataAug(img_folder):operate = Augmentor.Pipeline(img_folder)# 水平镜像旋转operate.flip_left_right(probability=1)operate.process()# 图像顺时针旋转90度operate.rotate90(probability=1)operate.process()# 图像缩放operate.zoom(probability=1, min_factor=1.4, max_factor=1.5)operate.process()def do_operate(datasets_path):folder_names = os.listdir(datasets_path)for folder in folder_names:folder_full_path = os.path.join(datasets_path, folder)dataAug(folder_full_path)returnif __name__ == '__main__':s = time.time()print("开始数据增强操作...")do_operate('continuum/alpha_jpg')print("数据增强操作结束,共计耗时:{:.3f}s".format(time.time()-s))
数据增强完后就接着进行train、test、val数据集的划分
  • create_train_datasets.py
# coding: utf-8
# author: hxy
"""
生成训练数据集;
将数据集按照6:3:1的比例划分训练、验证和测试集;
"""import os
import random
import time
import shutil# 保存用于训练分类的数据集的路径
train_rate = 0.6  # 60%
val_rate = 0.3  # 30%
test_rate = 0.1  # 10%# 存储数据的路径
train_data = 'train'
test_data = 'test'
val_data = 'val'def create_dir(folder_name):if not os.path.exists(folder_name):os.mkdir(folder_name)returndef split_datasets(object_folder):folder_names = os.listdir(object_folder)for folder in folder_names:folder_full_path = os.path.join(object_folder, folder)img_names = os.listdir(folder_full_path)img_nums = len(img_names)# 计算出划分数据集各部分的数量train_nums = int(img_nums * train_rate)val_nums = int(img_nums * val_rate)test_nums = img_nums - train_nums - val_nums# print(img_names)# 生成训练集for i in range(train_nums):randIndex = int(random.uniform(0, len(img_names)))create_dir(train_data)shutil.copy(os.path.join(folder_full_path, img_names[randIndex]),os.path.join(train_data, img_names[randIndex]))del (img_names[randIndex])# print(img_names)# 生成验证集for i in range(val_nums):randIndex_0 = int(random.uniform(0, len(img_names)))create_dir(val_data)shutil.copy(os.path.join(folder_full_path, img_names[randIndex_0]),os.path.join(val_data, img_names[randIndex_0]))del (img_names[randIndex_0])# print(img_names)# 生成测试集for name in img_names:create_dir(test_data)shutil.copy(os.path.join(folder_full_path, name),os.path.join(test_data, name))print("--{}--Train {} pics, Test {} pics, Val {} pics!". \format(folder, str(train_nums), str(test_nums), str(val_nums)))print('--训练数据集共计:{} 张'.format(str(len(os.listdir(train_data)))))print('--验证数据集共计:{} 张'.format(str(len(os.listdir(val_data)))))print('--测试数据集共计:{} 张'.format(str(len(os.listdir(test_data)))))if __name__ == '__main__':s = time.time()print('---正在准备数据集---')split_datasets(' ')print('---数据集划分共计耗时:{:.3f}s'.format(time.time() - s))
最后,数据集全部处理好后,就可以将所有子类归并到一起,作为一个大类使用了
  • merge_pics.py
# coding: utf-8
# author: hxy
"""
数据增强后将数据集从output目录中move出来;
"""import os
import shutildef copy_file(dataset_folder):folders = os.listdir(dataset_folder)for folder in folders:folde_full_path = os.path.join(dataset_folder, folder + '/' + 'output')pics = os.listdir(folde_full_path)for pic in pics:pic_full_path = os.path.join(folde_full_path, pic)shutil.move(pic_full_path, os.path.join(dataset_folder, folder))os.removedirs(folde_full_path)if __name__ == '__main__':copy_file('continuum/alpha_jpg')
最后的最后,我们可以train起来;【附上本人训练完后测试的结果图,测试下来很美好,实际一提交很打脸,只是为了让过程美好一点,自己骗自己,哈哈! 这个图看看就好,只想表达本文的训练过程是一个正儿八经的完整过程,哈哈】

- 文末总结

  • 本文供大家参考学习,不足之处还请度多谅解,互相学习;
  • 其实要是有能力,弄个度量学习,使用triplet-loss,应该最终的效果还是会有不错的提升;(yy出来的,哈哈)
  • 训练过程增加一点小策略也是ok的,学习率的调整、early-stop、多阶段训练等;
  • 数据量还可以扩充一点,哈哈!!

阿里天池-太阳黑子耀斑分类(赛道一)之数据处理脚本相关推荐

  1. 阿里天池学习赛 新闻文本分类

    当时我的成绩  阿里天池 原始数据  训练的词向量  模型 代码都在下面这两个链接里 一个完整版 一个不完整版 链接:https://pan.baidu.com/s/1I8l-5f0-IlrSPa3a ...

  2. 阿里天池_优秀策略答辩PPT和相关博客

    简介 前段时间想熟悉下机器学习完整项目,选择了阿里之前的一个相对实际的移动推荐项目(实际是分类,并非推荐),有兴趣自己研究.将本人参考借鉴的blog和ppt做了简单整理回顾.加深下印象 阿里天池大数据 ...

  3. 阿里天池供应链需求预测(二)

    阿里天池供应链需求预测第二阶段总结 一.已尝试的模型和存在的问题: LSTM单变量多步预测模型:通过循环迭代预测,实现了通过前42天的历史需求数据来预测未来14天的库存资源需求量:但是目前由于有的Un ...

  4. 干货满满~阿里天池目标检测保姆级教程

    阿里天池目标检测类比赛入门 1赛前准备 1.1设备 1.2必备技术 1.3相关论文 1.4开源工具 2比赛规则分析 2.1评分指标 2.2模型限制的解决方法 3数据分析 3.1感受野&anch ...

  5. 阿里天池比赛——食物声音识别

    阿里天池比赛--食物声音识别 最近写毕业论文无聊之余,再次参加阿里天池比赛,之前一直做CV,第一次尝试做语音识别,记录一下过程. 策略: 1.梅尔频谱和梅尔倒谱以及混合 2.多模型测试 想玩这个项目的 ...

  6. 阿里天池:淘宝用户行为分析项目

    数据来源:阿里天池 - 淘宝用户商品行为数据 (在这里仅选用表名为 "tianchi_mobile_recommend_train_user" 中的数据,用作淘宝用户行为分析) 项 ...

  7. 阿里天池项目:淘宝电商数据分析(mysql)

    随着互联网人口红利的消失,利用大数据分析深入的了解用户.进行精准化运营变得越来越重要.本项目通过电商角度,选取阿里天池项目中的淘宝App用户行为数据利用MYSQL进行数据分析. 1 理解数据 数据来源 ...

  8. 阿里天池数据挖掘大赛——贷款违约预测之探索性分析(可视化展示)

    项目背景: 选题出自阿里天池大赛--金融风控_贷款违约预测.赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款. *以下作图基于一个前提 ...

  9. 阿里天池学习赛-金融风控-贷款违约预测

    阿里天池学习赛-金融风控-贷款违约预测 1 赛题理解 1.1 赛题数据 1.2 评测标准 2 探索性分析(EDA) 2.1 初窥数据 2.2 查看缺失值占比 2.3 数值型变量 2.3.1 数据分布 ...

最新文章

  1. spark1.x和2.xIterable和iterator兼容问题
  2. 怎么快速插入 100 条数据,用时最短
  3. Objective-C中new与alloc/init的区别
  4. python web server comparison
  5. 内容分析在用户反馈分析中的应用
  6. IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)
  7. vue+element【后台案例 · 搜集 · 集锦】
  8. Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼...
  9. IOCP线程池的开发-(2)
  10. 深度学习(Deep Learning)综述
  11. hdu 2089 不要62--数位dp入门
  12. visio profession 2013破解
  13. 【爬虫】微博数据采集
  14. 进阶实验5-3.2 新浪微博热门话题 (30 分)
  15. 51实战演练之存储器-熊健-专题视频课程
  16. 初始C语言——字符串,转义字符,循环语句
  17. 普通视图和物化视图的区别(转)
  18. LiDAR 5 相控阵激光雷达 (OPA LiDAR)
  19. 给武则天找凤凰的java游戏,女皇武则天:我不愿被 extends
  20. 数字电路实验(十二)——CPU综合设计(8)

热门文章

  1. 无限分类树--Treeview
  2. [Codeforces Round #250 (Div. 1) -D] The Child and Sequence
  3. 如何进入和退出win10系统的安全模式
  4. 极品飞车ol服务器维护,极品飞车OL进不去游戏及解决方法
  5. 拖延症--http://blog.renren.com/GetEntry.do?id=431582744owner=259083751ref=sharenewsfeed#nogo
  6. 进销存管理系统的设计与实现
  7. CM10.1源码的下载和编译(支持CyanogenMod官方列出的机型和三星S5660、三星S5830、LG-P509等低配机型)...
  8. AngularJS $injector 依赖注入
  9. python format函数应用
  10. C# 微信开发-----微信会员卡(二)