---
title: 训练前准备
description: "ResNet50为一个深度残差网络，可用于对CIFAR-10和ImageNet的1000类数据集进行分类。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_000101.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_000101.html
indexId: d5fccc49aa3c4a9190af654624025e5e4ab9f6437351a16530f9e6e74ea0d8c473
---
# 训练前准备

#### 原始模型获取

ResNet50为一个深度残差网络，可用于对CIFAR-10和ImageNet的1000类数据集进行分类。

单击链接(https://github.com/tensorflow/models/tree/r2.1.0/official)获取ResNet原始网络脚本。

主要文件目录结构如下所示（只列出部分涉及文件，更多文件请查看获取的ResNet原始网络脚本）：```
├── r1   // 原始模型目录
│   ├── resnet    // ResNet主目录
│        ├── __init__.py     
│        ├── imagenet_main.py      // 基于ImageNet数据集训练网络模型
│        ├── imagenet_preprocessing.py     // ImageNet数据集数据预处理模块
│        ├── resnet_model.py     // ResNet模型文件
│        ├── resnet_run_loop.py    // 数据输入处理与运行循环（训练、验证、测试）
│        ├── README.md   // 项目介绍文件
│   ├── utils
│        ├── export.py     // 数据接收函数，定义了导出的模型将会对何种格式的参数予以响应
├── utils
│   ├── flags
│        ├── core.py         // 包含了参数定义的公共接口
│   ├── logs
│        ├── hooks_helper.py     //自定义创建模型在测试/训练时的工具，例如每秒钟计算步数的功能、每N步或捕获CPU/GPU分析信息的功能等
│        ├── logger.py      // 日志工具
│   ├── misc
│        ├── distribution_utils.py       // 进行分布式运行模型的辅助函数
│        ├── model_helpers.py      // 定义了一些能被模型调用的函数，例如控制模型是否停止
```


#### 数据集准备

1. 准备数据集

  a. 获取数据集
    本训练示例以ImageNet2012数据集为例，从ImageNet官方网站https://www.image-net.org/(https://www.image-net.org/)获取数据集。将准备好的数据集压缩包上传到训练环境上（需确认数据集是否完整）。

  b. 数据集目录参考（本示例在“ /data/dataset/”路径下）：
    1 2 3 4 ├──imagenet2012 │ ├──ILSVRC2012_img_train.tar │ ├──ILSVRC2012_img_val.tar │ ├──ILSVRC2012_bbox_train_v2.tar.gz

  c. 执行如下命令，创建并运行脚本文件，创建“train”、“val”、“bbox”和“imagenet_tf”目录，分别解压train、val、bbox数据集压缩包到对应的目录。

    1. 执行如下命令，创建并打开“prepare_dataset.sh”文件。
      vim prepare_dataset.sh

    2. 在文件中添加如下脚本命令。
      1 2 3 4 5 #!/bin/bash mkdir -p train val bbox imagenet_tf tar -xvf ILSVRC2012_img_train.tar -C train/ tar -xvf ILSVRC2012_img_val.tar -C val/ tar -xvf ILSVRC2012_bbox_train_v2.tar.gz -C bbox/

    3. 执行      :wq!
命令保存文件并退出。
    4. 执行如下命令运行脚本文件。
      bash prepare_dataset.sh 如果解压后的“train”目录下仍为.tar文件，请在“train”目录下执行以下命令解压。 find . -name "*.tar" | while read LINE ; do mkdir -p "${LINE%.tar}"; tar -xvf "${LINE}" -C "${LINE%.tar}"; rm -f "${LINE}"; done

  d. 检查数据集目录（本示例在“ /data/dataset/”路径下）。
    1 2 3 4 5 6 7 ├──imagenet2012 │ ├──ILSVRC2012_img_train.tar │ ├──ILSVRC2012_img_val.tar │ ├──ILSVRC2012_bbox_train_v2.tar.gz │ ├──bbox/ │ ├──train/ │ ├──val/

2. 转换数据集为TFRecord格式。

  a. 下载源代码。
    git clone https://github.com/tensorflow/models.git(https://github.com/tensorflow/models.git)

  b. 执行如下命令进入源代码的“datasets”目录，并预处理验证数据。
    cd models-master/research/slim/datasets/

    python preprocess_imagenet_validation_data.py /data/dataset/imagenet2012/val/ imagenet_2012_validation_synset_labels.txt # 预处理验证数据

  c. 将标注的XML文件转换为单个CSV文件。
    python process_bounding_boxes.py /data/dataset/imagenet2012/bbox/ imagenet_lsvrc_2015_synsets.txt | sort > imagenet_2012_bounding_boxes.csv

  d. 转换ImageNet数据集为TFRecord格式。
    python build_imagenet_data.py --output_directory=/data/dataset/imagenet2012/imagenet_tf --train_directory=/data/dataset/imagenet2012/train --validation_directory=/data/dataset/imagenet2012/val

3. 查看转换好的数据集。
  1 2 3 4 5 6 7 8 9 10 ├─ imagenet2012 ├─├─imagenet_tf │ ├──train-00000-of-01024 │ ├──train-00001-of-01024 │ ├──train-00002-of-01024 │ ... │ ├──validation-00000-of-00128 │ ├──validation-00001-of-00128 │ ├──validation-00002-of-00128 │ ...
