4

虽然在slim 模型中说明 train_image_classifier.py 可用于从头开始训练模型,但在实践中我发现很难。就我而言,我试图在一台 6xK80 的本地机器上从头开始训练 ResNet。我用这个:

DATASET_DIR=/nv/hmart1/ashaban6/scratch/data/imagenet_RF_record
TRAIN_DIR=/nv/hmart1/ashaban6/scratch/train_dir
DEPTH=50
NUM_CLONES=8

CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7,8" python train_image_classifier.py --train_dir=${TRAIN_DIR} --dataset_name=imagenet --model_name=resnet_v1_${DEPTH} --max_number_of_steps=100000000 --batch_size=32 --learning_rate=0.1 --learning_rate_decay_type=exponential --dataset_split_name=train --dataset_dir=${DATASET_DIR} --optimizer=momentum --momentum=0.9 --learning_rate_decay_factor=0.1 --num_epochs_per_decay=30 --weight_decay=0.0001 --num_readers=12 --num_clones=$NUM_CLONES

我遵循了与论文中建议的相同设置。我在本地机器上使用 8 个 GPU,batch_size 为 32,因此有效的批处理大小为 32x8=256。学习率最初设置为 0.1,每 30 个 epoch 衰减 10 个。经过 70K 步(70000x256/1.2e6 ~ 15 epochs)后,验证集的 top-1 性能低至 ~14%,而经过这么多次迭代后它应该在 50% 左右。我使用这个命令来获得 top-1 性能:

DATASET_DIR=/nv/hmart1/ashaban6/scratch/data/imagenet_RF_record
CHECKPOINT_FILE=/nv/hmart1/ashaban6/scratch/train_dir/
DEPTH=50

CUDA_VISIBLE_DEVICES="10" python eval_image_classifier.py --alsologtostderr --checkpoint_path=${CHECKPOINT_FILE} --dataset_dir=${DATASET_DIR} --dataset_name=imagenet --dataset_split_name=validation --model_name=resnet_v1_${DEPTH}

由于缺乏工作示例,很难说是否存在苗条训练代码中的错误或我的脚本中的问题。我的脚本有什么问题吗?有没有人成功地从头开始训练怨恨?

4

0 回答 0