报错:AttributeError: NoneType object has no attribute device

2023-05-16

今天搞个测试,测试是在horovod下进行的。

问题就出在加载权重(参数)文件的地方,加载权重命令load_weights前要先build一下,结果就build出这么一个错误:

Exception ignored in: <bound method _RandomSeedGeneratorDeleter.__del__ of <tensorflow.python.data.ops.dataset_ops._RandomSeedGeneratorDeleter object at 0x7f363100d4e0>>
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/data/ops/dataset_ops.py", line 3462, in __del__
AttributeError: 'NoneType' object has no attribute 'device'

这个报错真的是谜之报错,我根本没搞懂错哪了。但反正是注释掉build这句就不会报错。

于是我脱离horovod,在单纯的tensorflow2.1.0中重写了一下,发现没有问题,可以正常运行。

但是我一开始运行了一下发现报错是这样的:

Traceback (most recent call last):
  File "error.py", line 30, in <module>
    mnist_model.build(input_shape = (None, 28 ,28))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/sequential.py", line 260, in build
    super(Sequential, self).build(input_shape)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/network.py", line 682, in build
    self.call(x, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/sequential.py", line 281, in call
    outputs = layer(inputs, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/base_layer.py", line 737, in __call__
    self.name)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/input_spec.py", line 177, in assert_input_compatibility
    str(x.shape.as_list()))
ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 28, 28]
Exception ignored in: <bound method _RandomSeedGeneratorDeleter.__del__ of <tensorflow.python.data.ops.dataset_ops._RandomSeedGeneratorDeleter object at 0x7f7c76f37320>>
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/data/ops/dataset_ops.py", line 3462, in __del__
AttributeError: 'NoneType' object has no attribute 'device'

可以看到是model.build那句的问题,最后同样是AttributeError: 'NoneType' object has no attribute 'device'。

但是这次的错误提示比较多,里面有个有用信息就是倒数第5行的提示:

ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None, 784]

原来是build输入尺度错了,修改正确后发现脱离horovod运行是不会报错的。

 

最后我无意间发现了这样的Warning提示:

[1,0]<stderr>:2020-06-30 08:34:47.818137: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 376320000 exceeds 10% of system memory.
[1,0]<stderr>:2020-06-30 08:34:49.030225: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 188160000 exceeds 10% of system memory.

这个提示我就很熟悉了,这是提示memory占用率过高啊。但是我的程序是一个mnist测试程序而已,又是放在相当不错的服务器上运行的,而且服务器我是一个人独占并没有其他任务占用memory,怎么会有这个提示那?同时,https://github.com/tensorflow/tensorflow/issues/35326里面也有人遇见这个错误并提出了一样的怀疑。

为了验证是不是这个问题我观察mem使用率在程序运行的全过程都没看见有超过10%。但是我还是把程序中关于数据处理部分的程序注释掉,发现果然能正常运行没有报错了。所以这个报错究竟是不是memory问题还有待考证,初步判断是和memory有可能有一定关系的。

下面把程序放上来详细说明一下:

import tensorflow as tf
import horovod.tensorflow.keras as hvd
import os
import datetime
import package

time_start = datetime.datetime.now()

# 初始化
Log,arg = package.initial()

# 指定GPU信息和operator
gpus, opt = package.gpu_setting('keras+tensorflow2.0', Log)


(mnist_images, mnist_labels), _ = \
    tf.keras.datasets.mnist.load_data(path='mnist-%d.npz' % hvd.rank())

dataset = tf.data.Dataset.from_tensor_slices(
    (tf.cast(mnist_images[..., tf.newaxis] / 255.0, tf.float32),
             tf.cast(mnist_labels, tf.int64))
)
# dataset = dataset.repeat().shuffle(10000).batch(128)
dataset = dataset.repeat().batch(128)
mnist_model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, [3, 3], activation='relu'),
    tf.keras.layers.Conv2D(64, [3, 3], activation='relu'),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Dropout(0.25),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(10, activation='softmax')
])

mnist_model.compile(loss=tf.losses.SparseCategoricalCrossentropy(),
                    optimizer=opt,
                    metrics=['accuracy'],
                    experimental_run_tf_function=False)
# weight_file = os.path.join(arg.ckp_path,'checkpoint-break-step-64.h5')
if hvd.rank()==0:
    mnist_model.build(input_shape=(None, 28, 28, 1))
    mnist_model.load_weights('checkpoint-1.h5')

第23行被注释掉的“# dataset = dataset.repeat().shuffle(10000).batch(128)”是原来的程序。

下面第24行“dataset = dataset.repeat().batch(128)”是我修改后的程序。

实验发现,23行换成24行(删除shuffle)就不会报错了。

难道真是内存的事???

只能说有一定关联吧,但应该也不是memory不足引起的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

报错:AttributeError: NoneType object has no attribute device 的相关文章

随机推荐

  • FreeRTOS解析:TCB_t结构体及重要变量说明(Task-1)

    FreeRTOS解析 xff1a TCB t结构体及重要变量说明 xff08 Task 1 xff09 受博客限制 xff0c 如果您想获得更好的阅读体验 xff0c 请前往https github com Nrusher FreeRTOS
  • 深度学习与slam的小小思考

    深度学习与slam的小小思考 好久不发文章了 xff0c 主要是研究的东西因为要发论文 xff0c 所以发表之前很难分享出来 xff0c 加上研一上学期老师安排的工作比较琐碎 xff0c 所以更新的很少 不过研一下可能会好些 xff0c 立
  • IT运维人员必看!超全信息化建设之运维资料

    随着IT建设的不断深入和完善 计算机硬软件系统的运行维护已经成为了各行各业各单位领导和信息服务部门普遍关注和不堪重负的问题 xff0c 据统计 xff0c IT运维服务占到IT部门工作量的80 左右 IT运维普遍存在以下现象 xff1a 1
  • ovn原理与实践

    上篇文章简单介绍了ovs Open Virtual Switch 的原理和使用 xff0c 但是仔细想想 xff0c 单纯的ovs在云计算领域还存在着一些问题 xff0c 例如 xff1a ovs只能做二层转发 xff0c 没有三层的能力
  • 基于51单片机智能电子密码锁电路设计(毕设课设)

    基于AT89C51单片机的简易六位密码锁 输入三次锁定 密码输入错误蜂鸣器和LED灯报警 可以修改密码 资源下载 下载地址如下 xff08 912 xff09 xff1a https docs qq com doc DTlRSd01BZXN
  • CentOS7配置tomcat开机自启动

    文章目录 CentOS7配置tomcat开机自启动创建服务创建软连接刷新配置启动 重启 停止 状态开启自启动 关闭自启动 CentOS7配置tomcat开机自启动 创建服务 在 lib systemd system目录下创建一个脚本文件to
  • Jetson TX2 入门 ——打开摄像头

    Jetson TX2自带有一个板载摄像头 xff0c 当然也可以在TX2上连接usb摄像头和csi摄像头 1 打开板载摄像头 1 xff09 方法一 xff1a 视屏分辨率预览 nvgstcapture 1 0 prev res 61 3
  • 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

    package cn itcast test06 public class Test08 方法1 public static int method int num boolean flag 61 num gt 0 true false nu
  • 史上最强,Cas单点登录之服务端搭建

    目录 Cas Server搭建大浪淘沙 xff0c 沉者为金弱水三千 xff0c 只取一瓢 服务端配置介绍最常用的三个配置文件最常用的三个JSP页面 自定义数据源关闭HTTPS协议开启Restful接口1 加入jar包 2 配置web xm
  • C#创建子窗体、父窗体

    本文部分内容来自书籍 多文档界面 xff08 Multiple Document Interface xff0c MDI xff09 xff0c 其窗体用于同时显示多个文档 xff0c 每个文档显示在各自的窗口中 在MDI窗体中 xff0c
  • k8s部署报错network: failed to find plugin “flannel“ in path [/opt/cni/bin]]

    k8s在部署工作负载时 xff0c pod详情页提示以下问题 Failed to create pod sandbox rpc error code 61 Unknown desc 61 failed to set up sandbox c
  • VS各版本VC各版本对应关系

    Visual Studio 经过多年的发展 xff0c 有许多版本 xff0c 经常我们在拿到一份代码时不知道对应的VS版本 这时候可以打开工程目录下的vcproj vcxproj文件 xff0c 如下所示 span class token
  • 浅谈机场综合布线运维工作中的难点问题

    随着系统规模越来越大 体系越来越复杂 信息系统的作用越来越明显 运维保障的要求越来越高 xff0c 综合布线维护工作面临的问题也愈加凸显 以下以国内某大型机场在综合布线运维工作中面临的实际问题为例 xff0c 给大家分享综合布线运维利器 耐
  • 关于集成商转型

    前言 xff1a 集成商转型是一个老生常谈的话题 xff0c 集成服务一直以来就随着IT行业趋势而发展 xff0c IT行业从最初的硬件主导到硬件软件化 xff0c 再到软件服务化 xff0c 大趋势或将发展至服务产品化 xff0c 行业趋
  • centos系统开启vncserver

    yum y install tigervnc server 这个是安装命令 安装好以后输入vncserver就能开启 第一次开启会让设置密码 这个密码是用户vncclient 连接的时候需要输入的密码 vncserver kill 1 这个
  • 升降横移式立体车库设计机械设计毕业设计全套资料

    资源下载 下载地址如下1502 xff1a https docs qq com doc DTlRSd01BZXNpRUxl 本文选用了社会需求大 xff0c 最常见的一种立体车库 升降横移式立体停车库 介绍和分析了升降横移式立体停车库的结构
  • 在NVIDIA Jetson 平台上运行Deepstream速度慢的常见解决办法

    NVIDIA发布了最新的Deepstream 4 0 光说不练假把式 xff0c 光练不说傻把式 xff0c 不少用户发现在Jetson嵌入式平台上运行Deepstream会遭遇到速度变慢 xff0c 今天汇总几个常见解决方案 xff1a
  • Ubuntu18.04 安装ROS Melodic(官方版) 之不使用科学方法

    此前记录了官方安装流程 xff0c 参见Ubuntu18 04 安装ROS Melodic 官方版 xff0c 但是受限于无法访问raw githubusercontent com xff0c 需科学方法才能成功安装 xff0c 带来诸多不
  • 分层存储Stratis和管理快照

    分层存储Stratis Stratis称为卷管理文件系统 xff0c 以管理物理存储设备池的服务形式运行 xff0c 透明的为所创建的文件系统创建和管理卷 相较于Lvm操作简化了 xff0c Stratis可以动态管理卷层 xff0c 不需
  • 报错:AttributeError: NoneType object has no attribute device

    今天搞个测试 xff0c 测试是在horovod下进行的 问题就出在加载权重 xff08 参数 xff09 文件的地方 xff0c 加载权重命令load weights前要先build一下 xff0c 结果就build出这么一个错误 xff