EfficientNetV2 Finetune on CIFAR10出现head_1/dense/bias is not found in ckpt

本文讲述了作者在尝试使用EfficientNetV2进行图片数据集训练时遇到的问题,包括路径设置错误、变量命名冲突和网络问题。通过调整命令、检查包版本及网络状况,作者最终解决了找不到特定变量和初始化ckpt的问题,成功进行了模型微调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 起因:我是个小白,想在自己的图片数据集上使用efficientnetv2,就先运行了GitHub上的示例代码(需要指定其中的路径,这个等下再细说):
    python main.py --mode=train  --model_name=efficientnetv2-s  --dataset_cfg=cifar10Ft --model_dir=$DIR --hparam_str="train.ft_init_ckpt=$PRETRAIN_CKPT_PATH"

    但是会出现在ckpt文件里找不到head_1/dense/bias或者head_1/dense/kernel的问题,在这之前还出现过类似的找不到。

  2. 失败尝试:

    1. 修改命令里的路径:在GitHub上下载了好几个ckpt压缩包,拿里面的ckpt和model文件来运行,但无论哪个压缩包都不对

    2. 检查代码:输出下载的ckpt的变量名,想看看究竟有没有,结果是,有head的,没有head_1的。偶然看到一篇博客说如果多次载入一张graph,就会出现由于一个变量名已经存在了,于是会创建一个新的变量,类似于已经有weight,就会在第二次读取graph的时候命名为weight_1,如果要避免,在每次读完graph之后就添加一句ops.reset_default_graph()。于是我拼命找,找"with"、找"session",每个函数都看过去,到底哪里多次载入了?我找不准,添加的这句要么是没有报错,但是找不到变量的错误仍然在,要么就是说不可以中途打断nested graph,建议我新建一张graph。我再输出代码里面与ckpt里变量有关的trainable variable,发现head_1是本应该有的,不是多次载入graph的结果,因为列表里dense/bias和dense/kernel就只有

      <tf.Variable 'efficientnetv2-s/head_1/dense/kernel:0' shape=(1280, 1000) dtype=float32>, <tf.Variable 'efficientnetv2-s/head_1/dense/bias:0' shape=(1000,) dtype=float32>

      这两个变量,如果多读的话,是应该至少有四个的,也就是efficientnetv2-s/head/dense/kernel、efficientnetv2-s/head/dense/bias、efficientnetv2-s/head_1/dense/kernel、efficientnetv2-s/head_1/dense/bias这样。但是没有,所以不是多次载入的问题。

  3. 成功的转机:服务器连不上了,重启了一次,重新连上之后有些包找不到了,为了兼容就给好些包都换了版本,之后再运行发现代码跑通了!!出现了类似下面这样的刷屏信息:

    INFO:tensorflow:global_step/sec: 11.9026
    I0327 20:51:49.209239 139832147883200 tpu_estimator.py:2391] global_step/sec: 11.9026
    INFO:tensorflow:examples/sec: 6094.11
    I0327 20:51:49.209511 139832147883200 tpu_estimator.py:2392] examples/sec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值