虽然在slim model中声明train_image_classifier.py可用于从头开始训练模型,但我发现在实践中很难。在我的情况下,我试图在6xK80s的本地机器上从头开始训练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个时期将衰减10个。在70K步骤(70000x256 / 1.2e6~15个时期)之后,验证集上的前1个性能低至~14%,而在经过多次迭代后应该在50%左右。我用这个命令获得了前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}
由于缺乏工作示例,很难说苗条训练代码中是否存在错误或我的脚本中存在问题。我的剧本有什么不对吗?有没有人成功地从头开始训练怨恨?