【GPU线上跑AI项目实践】猫狗分类实践项目学习打卡笔记

学习内容
任务一主要内容是熟悉趋动云平台的使用方式
使用线上虚拟GPU跑AI项目的步骤

  1. 准备好AI项目的代码
  2. 创建项目,添加项目的镜像、数据集,上传代码
  3. 点击“运行代码”,点击“开发”,进入初始化开发环境页,配置开发环境的资源和镜像
  4. 进入开发环境,在Jupyter lab中修改代码,在网页终端中运行代码查看结果
  5. 提交离线训练
  6. 结果集存储与下载
    说明:在开发环境中使用Jupyter lab修改代码、使用网页端运行代码都是AI项目的调试过程。而提交的离线训练则是使用更大规模数据集进行进一步训练的过程。最后存储结果集中的模型文件能够公开已经训练好的模型并提供下载,便于将此模型纳入之后的任务中

在猫狗分类的任务中
使用镜像为官方提供TensorFlow 2.x 数据集使用公开的DogsVsCats 代码使用官方提供的DogsVsCats.py
在网页端运行的命令为

python  $GEMINI_RUN/DogsVsCats.py --num_epochs 5 --data_dir $GEMINI_DATA_IN1/DogsVsCats/ --train_dir $GEMINI_DATA_OUT

代码分析
对命令行参数的处理

parser = argparse.ArgumentParser(description='Process some integers')
parser.add_argument('--mode', default='train', help='train or test')
parser.add_argument("--num_epochs", default=5, type=int)
parser.add_argument("--batch_size", default=32, type=int)
parser.add_argument("--learning_rate", default=0.001)
parser.add_argument("--data_dir", default="/gemini/data-1")
parser.add_argument("--train_dir", default="/gemini/output")
args = parser.parse_args()

说明:我们的运行命令中指定了训练轮数num_epoch、数据集位置data_dir和结果保存位置train_dir
解码图片和修改图片大小的方法

def _decode_and_resize(filename, label):
    image_string = tf.io.read_file(filename)
    image_decoded = tf.image.decode_jpeg(image_string, channels=3)
    image_resized = tf.image.resize(image_decoded, [150, 150]) / 255.0
    return image_resized, label

输入数据集构建

train_cat_filenames = tf.constant(cats[:10000])
train_dog_filenames = tf.constant(dogs[:10000])
train_filenames = tf.concat([train_cat_filenames, train_dog_filenames], axis=-1)
# 使用zeros()函数和ones()函数创建图片的标签
train_labels = tf.concat(tf.zeros(train_cat_filenames.shape, dtype=tf.int32),tf.ones(train_dog_filenames.shape, dtype=tf.int32)], axis=-1)
train_dataset = tf.data.Dataset.from_tensor_slices((train_filenames, train_labels))
# 使用map函数处理原始图片数据
train_dataset = train_dataset.map(map_func=_decode_and_resize,num_parallel_calls=tf.data.experimental.AUTOTUNE)

模型定义

model = tf.keras.Sequential([
        tf.keras.layers.Conv2D(32, 3, activation="relu", input_shape=(150, 150, 3)),
        tf.keras.layers.MaxPool2D(),
        tf.keras.layers.Conv2D(64, 3, activation="relu"),
        tf.keras.layers.MaxPool2D(),
        tf.keras.layers.Conv2D(128, 3, activation="relu"),
        tf.keras.layers.MaxPool2D(),
        tf.keras.layers.Conv2D(128, 3, activation="relu"),
        tf.keras.layers.MaxPool2D(),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dropout(0.5),
        tf.keras.layers.Dense(512, activation="relu"),
        tf.keras.layers.Dense(2, activation="softmax")
    ])
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=args.learning_rate),loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=[tf.keras.metrics.sparse_categorical_accuracy])

说明:模型使用了3层卷积池化操作,使用dropout训练技巧达到集成且避免过拟合的效果,再使用两个全连接层将模型输出映射为0,1类别上。模型使用的Adam作为优化器,损失函数使用的是sparse_categorical_crossentropy

浅析sparse_categorical_crossentropy和categorical_crossentropy两种交叉熵损失函数
categorical_crossentropy适用于输入数据的标签采用One-Hot编码表示的情况
sparse_categorical_crossentropy适用于输入数据的标签采用序号编码label-encoding的情况

从代码中我们可以看到猫狗图片的标签使用的是label-encoding的方式进行的编码,因而损失函数选择的sparse_categorical_crossentropy计算

参考资料

  1. datawhale 免费GPU跑AI项目教程
  2. TensorFlow中两种多分类损失函数比较
  3. 趋动云帮助文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值