记录tensorflow下代码的一些报错处理

工作之后没在用python了,都是之前在学校做项目记录的,有的问题很小白,都是一些随笔整理,有错误希望大家多包含,希望能对初学者有点用处,本来一直在草稿箱里的,但是以后应该都不会再搞这方面了就放出来了

升级到tf2.0之后无法导入keras ,直接修改导入包的代码如下`

from tensorflow.python.keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img
import os

升级到tf2.0之后import tf 报错问题,修改import代码如下

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

报错cannot import name ‘imsave’ from 'scipy.misc’解决方法
1.查看scipy包的版本
记录tensorflow下代码的一些报错处理_第1张图片
2.安装pillow并降级scipy到1.2.1版本以下

  pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
  pip install scipy==1.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

记录tensorflow下代码的一些报错处理_第2张图片
自动卸载了之前的1.4.1的版本。

激活tensorflow环境

# To activate this environment, use
#     $ conda activate tensorflow
# To deactivate an active environment, use
#     $ conda deactivate

缺失的包在tensorflow的虚拟环境下 pip install 各种即可,注意要先 activate tensorflow!
查看已经安装的包,注意同样激活tensorflow之后,在虚拟环境里面

pip list

查看tensorflow版本和其他包版本或安装路径
首先激活tensorflow环境,进入python

import tensorflow as tf
tf. __ version__ (注意:是两个下划线),这个命令查看当前已安装tensorflow的版本
tf. __ path__ (注意:是两个下划线),这个命令查看当前已安装tensorflow的安装目录

安装一些常用缺失库
(1)安装cv2:pip install opencv-python
(2)安装人脸识别的库:pip install dlib == 18.17.100
(3)安装机器学习的库:pip install sklearn
(4)安装scipy库:pip install scipy
(5)安装numpy库:pip install numpy
(6)安装Pillow图像库:pip install Pillow
(7)安装matplotlib绘图库:pip install matplotlib
(8)升级pip:python -m pip install -U pip
安装6,7使用conda install
打开tensorboard
tensorboard一定要激活tensorflow环境之后打开!

tensorboard --logdir='/PycharmProjects/tensorflow_minst/MNIST_LOG/train'

放上绝对地址

Tensorflow 2.0 !!! No module named 'tensorflow.examples.tutorials’解决办法

参考该博客Tensorflow 2.0 !!! No module named 'tensorflow.examples.tutorials’解决办法
1.进入github的tensorflow主页下载缺失的文件 网址为:https://github.com/tensorflow/tensorflow。下载整个文件并解压,找到tensorflow/examples/tutorials文件
2.找到安装tensorflow的文件夹
记录tensorflow下代码的一些报错处理_第3张图片
将之前下载的tutorials文件夹复制到这里
ModuleNotFoundError: No module named 'sklearn’
切换到tensorflow下,安装

conda install sklearn

报错。错误信息:Solving environment: failed
CondaHTTPError: HTTP 000 CONNECTION FAILED for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/repodata.json
Elapsed: -
An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
ConnectionError(ReadTimeoutError(“HTTPSConnectionPool(host=‘mirrors.tuna.tsinghua.edu.cn’, port=443): Read timed out.”))
使用如下代码再次安装

conda install scikit-learn

记录tensorflow下代码的一些报错处理_第4张图片
如果再次报错添加源:
channels:

  https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

或者ctrl+H打开.condarc文件添加并删除最后一行default
记录tensorflow下代码的一些报错处理_第5张图片
from keras.utils import np_utils
导致报错ModuleNotFoundError: No module named 'keras’
进入tensorflow虚拟环境,pip list查看已安装的包,发现没有keras。
激活tensorflow环境,进入python后,import tensorflow没出错,import keras时候提示no module named ‘keras’,安装keras。
AttributeError: module ‘tensorflow’ has no attribute 'contrib’
regularizer = tf.contrib.layers.l2_regularizer(lam)正则化函数中的contirb模块不能用
不想降版本只能改代码
如下方法参考对于TF2.0无法使用tf.contrib.layers.l2_regularizer的替代方法,使用tf.nn.l2_loss的替代方法

regularizerd_L2 = tf.contrib.layers.l2_regularizerd(0.01)
loss = regularizerd_L2(a)

这个0.01就是我们所要乘的这个值γ,但是实际上函数会自己除一个2以得到比较稳定的结果所以我们这个γ的真实值为0.005,同时我们还有一个函数tf.nn.l2_loss,这个也是计算L2正则损失,使用方法如下

loss = tf.nn.l2_loss(a)

计算二位范数实际上是把每个数单独平方之后开根号,和计算什么方差啊之类的有一点点像,但是tf.nn.l2_loss这个函数他只是平方之后,直接除以二,没有其他操作。那我们打个比方,所有的数的平方和为sum,那么上面的函数就是
(sum ** 0.5)* 0.5 *0.01

而对于下面的函数计算则是

sum * 0.5

所以我们想要等效实现最上面的一段代码我们可以这样去改

loss = ((tf.nn.l2_loss(a) * 2) ** 0.5) * 0.5 * 0.01

0.01就是你在tf.contrib.layers.l2_regularizerd()中参数的值,对应修改即可
对应我的代码修改为

报错消失,当然还有别的报错T_T 慢慢改吧
tensorflow.python.framework.errors_impl.InvalidArgumentError: logits and labels must be broadcastable: logits_size=[16,11] labels_size=[16,5]
[[node softmax_cross_entropy_with_logits (defined at /PycharmProjects/imagetest/cnn3.py:140) ]]

logits_size=[16,11] labels_size=[16,5]维度不匹配问题,需要自己修改代码中输出类别数。
IOError: [Errno 21] Is a directory
意思读取方式为图片文件,而非文件夹读取,读取路径直接写道图片文件所在的文件夹。
label = int(filename.split(’_’)[0]) # 文件名_之前的内容
ValueError: invalid literal for int() with base 10: 'banana1’

label = int(filename.split('_')[0])  # 文件名_之前的内容

这条语句是获取样本的标签,就是样本的类别。如果数据是一张张图片,图片按文件夹倒数分不同类别存放,例如类别是0、1、……100为索引的类别,文件路径加名是land\9\mysamp.jpg,那标签就隐含在路径中了,这样,只需要提取出‘9’的字符串再转换成整数就是类别索引。
如果是[-2]代表倒数第二个,是python列表或numpy数组的索引方式。
filename.split(’_’)[0]意思是输出的是文件名_之前的内容,所以_文件名之前的内容必须是数字,否则int类型转换会报错
ModuleNotFoundError: No module named 'tensorflow.contrib
在tensorflow的虚拟环境下安装silm包

pip install --upgrade tf_slim

导入silm包的时候

#import tensorflow.contrib.slim as slim
import tf_slim as slim

使用新的语句
ps:如果升级到tf2.0的版本之后,slim包大概率不能用了,tf2.0版本移除里contrib的函数,不过也看情况,能力有限,程序还是没通。
参考解决tensoflow2.x中使用tf.contrib.slim包时出现的No module named:tensorflow.contrib 问题

解决pycharm中运行程序以pytest
参考这条

AttributeError:module tensorflow no attribute app
原文代码:

 if __name__ == '__main__':
          tf.app.run()

报错 找不到app,按照网上的方法替换为 tf.compat.v1.run() 还是报错
最终解决办法参考
主要是因为tf.app.run()是运行程序的代码,由于使用tensorflow2.0 版本内不含app
故将头文件改成

# import tensorflow as tf
import tensorflow.compat.v1 as tf
#tf.disable_v2_behavior()

把第三行注释掉就不会报错了
NameError: name ‘Glob’ is not defined
这两句报错’‘glob’'没有被定义,这里楼主真的wtf????

file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extension)
file_list.extend(glob.glob(file_glob))

参考解决办法
将glob.glob(file_glob)改成gfile.Glob(file_glob) 报错消失
tensorboard:No dashboards are active for the current data set.
tensorboard真的令我枯了
首先一定要在激活tensorflow的环境下打开tensorboard!!
进入存放logs文件夹的上一级
记录tensorflow下代码的一些报错处理_第6张图片在这里插入图片描述
使用tensorboard --logdir=test
这里的test文件夹是存放logs文件的,成功打开!!血泪史!!T—T
参考这边博客添加tensorboard代码
参考这篇博客tf2.0版本tensorboard查看graph
由于tensorflow2.0取消了sess和初始静态图,所以无法使用像1.x版本,直接将sess.graph添加进tensorboard,所以需要使用trace_on进行记录。

trace_export():停止trace,并将之前trace记录到的信息写入profiler日志文件。
trace_off():停止trace,并舍弃之前trace记录。
trace_on():开始trace

我们可以在训练时使用 tf.summary.trace_on 开启 Trace,此时 TensorFlow 会将训练时的大量信息(如计算图的结构,每个操作所耗费的时间等)记录下来。在训练完成后,使用 tf.summary.trace_export 将记录结果输出到文件。
rticle/details/105974714

卸载tensorflow重新装
首先进入激活tensorflow虚拟环境并进入
卸载

pip uninstall tensorflow

安装指定版本tensorflow,由于我之前卸载了tf2.0的现在想装回来,直接

conda install tensorflow==2.0.0

报错 省略一堆参数

 Traceback (most recent call last):
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 227, in _load
        mod_etag_headers.get('_mod'))
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 574, in fetch_repodata_remote_request
        raise Response304ContentUnchanged()
    conda.core.subdir_data.Response304ContentUnchanged

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/conda/lib/python3.7/site-packages/conda/exceptions.py", line 819, in __call__
        return func(*args, **kwargs)
      File "/opt/conda/lib/python3.7/site-packages/conda/cli/main.py", line 78, in _main
        exit_code = do_call(args, p)
      File "/opt/conda/lib/python3.7/site-packages/conda/cli/conda_argparse.py", line 77, in do_call
        exit_code = getattr(module, func_name)(args, parser)
      File "/opt/conda/lib/python3.7/site-packages/conda/cli/main_install.py", line 11, in execute
        install(args, parser, 'install')
      File "/opt/conda/lib/python3.7/site-packages/conda/cli/install.py", line 235, in install
        force_reinstall=context.force,
      File "/opt/conda/lib/python3.7/site-packages/conda/core/solve.py", line 518, in solve_for_transaction
        force_remove, force_reinstall)
      File "/opt/conda/lib/python3.7/site-packages/conda/core/solve.py", line 451, in solve_for_diff
        final_precs = self.solve_final_state(deps_modifier, prune, ignore_pinned, force_remove)
      File "/opt/conda/lib/python3.7/site-packages/conda/core/solve.py", line 180, in solve_final_state
        index, r = self._prepare(prepared_specs)
      File "/opt/conda/lib/python3.7/site-packages/conda/core/solve.py", line 592, in _prepare
        self.subdirs, prepared_specs)
      File "/opt/conda/lib/python3.7/site-packages/conda/core/index.py", line 215, in get_reduced_index
        new_records = query_all(spec)
      File "/opt/conda/lib/python3.7/site-packages/conda/core/index.py", line 184, in query_all
        return tuple(concat(future.result() for future in as_completed(futures)))
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 95, in query
        self.load()
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 149, in load
        _internal_state = self._load()
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 233, in _load
        mod_etag_headers.get('_mod'))
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 280, in _read_local_repdata
        _internal_state = self._process_raw_repodata_str(raw_repodata_str)
      File "/opt/conda/lib/python3.7/site-packages/conda/core/subdir_data.py", line 317, in _process_raw_repodata_str
        json_obj = json.loads(raw_repodata_str or '{}')
      File "/opt/conda/lib/python3.7/json/__init__.py", line 348, in loads
        return _default_decoder.decode(s)
      File "/opt/conda/lib/python3.7/json/decoder.py", line 337, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/opt/conda/lib/python3.7/json/decoder.py", line 353, in raw_decode
        obj, end = self.scan_once(s, idx)
    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 10485587 (char 10485586)

镜像源的问题,解决方案
首先查看镜像源

conda config --show

找到channels呢一行查看都是什么源,由于清华源好像有问题,所以替换为科大源
移除清华源

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/

添加科大源

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/

使用该源

conda config --set show_channel_urls yes

重新安装tensorflow==2.0.0
装好之后出现测试,输入python之后import tensorflow as tf 之后出现

AttributeError: module ‘tensorflow‘ has no attribute ‘compat‘

解决方法:
使用conda list查看tensorflow版本 发现
tensorflow2.0.0
tensorflow-estimator
2.1.0
不匹配
重新卸载tensorflow之后
再次安装

conda insatll tensorflow-estimator==2.1.0

测试成功

你可能感兴趣的:(python,tensorflow,python,人工智能)