tensorflow-gpu报错 self._traceback = tf_stack.extract_stack()

tensorflow-gpu报错 self._traceback = tf_stack.extract_stack()

22年1月19日23点更
终于找到了最终原因!!

原因分析
最终原因,修改参数之后的向量维度与实现训练好的保存的checkpoint的向量维度不相符,结果就会报这个错。
因为电脑太垃圾,在下载了别人的模型之后运行太慢,就把隐藏层维度调小了,结果一直报标题所示的错误,一个多月后仔细阅读报错的一大堆内容才发现是因为维度不对。

解决办法

  1. 改回原来的参数设置,网络相关参数不要动,可以吧batch_size调小一些。
  2. 找到代码中保存checkpoint的路径,把checkpoint删除让模型重新训练,优点是可以随心所欲的改隐藏参数,缺点是一切要重头再来,不能利用别人训练好的参数。当然,如果这次的参数设置的还不满意,依然需要删除checkpoint才能再次修改参数。

教训
1.网络结构参数不要随便改。
2.报错信息要耐心看。

如果帮到你的话点个赞吧

原因一、显存满了

此时可以通过在cmd输入命令 nvidia-smi 查看GPU运行状态,
很有可能会因为输入的batch_size或者隐藏层层数太多,显存已经占满还未能将数据全部加载,此时gpu不会开始工作(类似于内存与cpu),使用率为0%
在这里插入图片描述

原因一的解决办法:
1.
调小bath_size和隐藏层层数,调小图片分辨率,关闭其他耗显存的软件,以及其他能减小显存占用的方法,再重试。若显存只有两个G,最好还是用cpu的跑吧。
2.
将1.配合代码使用

os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:0' #指定所用的gpu

# GPU 按需分配
config = tf.compat.v1.ConfigProto(allow_soft_placement=True)
config.gpu_options.per_process_gpu_memory_fraction = 0.7  #GPU显存用量百分比
tf.compat.v1.keras.backend.set_session(tf.compat.v1.Session(config=config))

原因二、存在重复的代码,调用程序重叠
这个是我在保存模型与加载模型时发现的,在保存和加载时都重复写了对变量的赋值与运算操作,在加载时就报错 self._traceback = tf_stack.extract_stack()
瞬间感觉tensorflow报错self._traceback = tf_stack.extract_stack()的情况有很多!!
报错时代码如下

import tensorflow as tf


a = tf.Variable(5., tf.float32)
b = tf.Variable(6., tf.float32)
num = 10
model_save_path = './model/'
model_name = 'model'
saver = tf.train.Saver()

#准备保存参数
with tf.Session() as sess:
    init_op = tf.compat.v1.global_variables_initializer()
    sess.run(init_op)
    for step in np.arange(num):
        c = sess.run(tf.add(a, b))
        saver.save(sess, os.path.join(model_save_path, model_name), global_step=step)
print("参数保存成功!")

#准备加载参数
a = tf.Variable(5., tf.float32)
b = tf.Variable(6., tf.float32) # 注意这里重复了
num = 10
model_save_path = './model/'
model_name = 'model'
saver = tf.train.Saver()    # 注意这里重复了

with tf.Session() as sess:
    init_op = tf.compat.v1.global_variables_initializer()
    sess.run(init_op)
    ckpt = tf.train.get_checkpoint_state(model_save_path)
    if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess, ckpt.model_checkpoint_path)
    print("load success")

运行代码便会报错: self._traceback = tf_stack.extract_stack()

原因二解决方法
当注释掉参数加载中的 saver = tf.train.Saver() 或者注释掉

a = tf.Variable(5., tf.float32)
b = tf.Variable(6., tf.float32) # 注意这里重复了

模型都不再报错。具体原因我也不清楚。

原因三:
和原因二比较像,当一次运行创建了2次及以上会话,也就是重复运行了with tf.Session() as sess: 也会报该错误,
解决办法:查看是否是将 with tf.Session() as sess:写到了循环里,或者找重复创建会话的代码,改过来。

原因四: 2022/4/22

在 tensorflow 的一个Graph中,如果进行了train又进行了evalution,则他们的feed_dict中传入的向量的维度必须相等,也就是说eval的数据集必须padding到与train相同的维度。不然会报该错。

还有其他说明类型的欢迎补充
有用的话点个赞再走吧~

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值