tf.image.convert_image_dtype使用注意事项

爱被打了一巴掌 2021-11-10 23:18 284阅读 0赞

问题:

在使用tf.image.convert_image_dtype方法将一个uint类型的tensor转换为float类型时,该方法会自动对数据进行归一化处理,将数据缩放到0-1范围内,如果没有注意到这点,之后在进行网络训练时会发现网络不收敛、不训练。

示例:

1、读取图像数据并显示

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4eDY1NA_size_16_color_FFFFFF_t_70

可以看到当前的数据类型为int,范围在0-255之间

2、使用tf.image.convert_image_dtype转换数据类型为float

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4eDY1NA_size_16_color_FFFFFF_t_70 1

可以看到经过转换后的数据范围在0-1之间,而且图像数据显示还是正常的,说明虽然进行了数据归一化,但是并没有破坏图像数据包含的信息。

这里需要注意的是,该方法已经对数据做了归一化处理,如果没有意识到这点,在训练网络时,如果再次进行归一化则会出现网络训练不收敛的情况。

解决办法:

1、使用tf.cast方法转换数据类型为float

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4eDY1NA_size_16_color_FFFFFF_t_70 2

可以看到此时数据类型已经转换为float,而且数据范围没有发生变化。(上面将数据转换为int32只是为了能够使用matplotlib进行图像显示)

2、将tensor转换为numpy数据,然后再转换numpy数组的类型

这里给出tensor和numpy数组想混转化的方法:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4eDY1NA_size_16_color_FFFFFF_t_70 3

发表评论

表情:
评论列表 (有 0 条评论,284人围观)

还没有评论,来说两句吧...

相关阅读

    相关 svn使用注意事项

     项目上有\号,代表有sVN操作未做                ?代表文件未提交       提交 commit   将本地没有在SVN上的资源上传到svn服务器上