深度学习——如何去除警告
警告本质:包版本兼容性问题,版本不断地在更新,又要做到向下兼容,所以对于版本不同导致的差异性写法(函数、参数等等)都会给出提醒。
个人建议:非强迫症的朋友,还是不要添加去除警告的代码,便于以后排查问题。当然,如果是本地离线项目代码,注释掉去除警告的代码就OK;但是,相信部分强迫者很难容忍一大堆警告的出现,尤其是深度学习框架:Tensorflow与Keras。下面分别提供两者的去除警告方法。
- Tensorflow去除警告
- Keras去除警告【导入keras会报和tensorflow同样的错误,因为keras是以tensorflow为后端的框架】
在文件开头添加注释代码:
import os
import tensor flow as tf
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
可能部分朋友的代码使用了上面的注释还是会存在警告,那是因为各种版本太高导致的哈(比如numpy,主要还是习惯了pip install numpy安装方式,这样装的是最新版本,一般都会提醒你各种警告,除非代码用的是最新版的格式写的。这时候一般两种解决方案:A. 指定版本重新安装,说白了,就是降低一下numpy的版本,与现在的代码格式要求保持一致;B. 修改当前代码,肯定有函数或参数没有按照最新版本的格式要求写),这个可以百度解决,问题不大。实在找不到,欢迎留言讨论。例子:https://www.jianshu.com/p/945290726335
为了测试,基于LSTM的keras版本,给大家一个例子吧。可以直接运行。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@Time :2019/8/10
@Name :GeekZW
@Contact :1223242863@qq.com
@File :lstm_keras.py
@Software :Pycharm
"""
from __future__ import print_function
import os
from keras.models import Sequential
from keras.layers import Dense, Activation, Embedding
from keras.layers import LSTM, GRU
import tensorflow as tf
import numpy as np
np.random.seed(1337)
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
class LSTMModel(object):
def __init__(self,
max_features,
embedding_dims,
max_len,
labels):
self.max_features = max_features
self.embedding_dims = embedding_dims
self.max_len = max_len
self.labels = labels
def get_model(self):
model = Sequential()
# 嵌入层,每个词维度为128
model.add(Embedding(self.max_features, self.embedding_dims, input_length=self.max_len))
# LSTM层,输出维度128,可以尝试着换成 GRU 试试
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2)) # LSTM 与 GRU
model.add(Dense(len(self.labels))) # 单神经元全连接层
model.add(Activation("softmax")) # sigmoid 激活函数层
# 定义损失函数、优化器、分类度量指标
model.compile(loss="binary_crossentropy",
optimizer="adam",
metrics=["accuracy"])
return model
if __name__ == "__main__":
lstm_model = LSTMModel(
max_features=20000,
embedding_dims=200,
max_len=25,
labels=["A", "B", "C"]
)
model = lstm_model.get_model()
model.summary()
print("输入节点名:", model.inputs)
print("输出节点名:", model.outputs)
运行结果:
假如说,不添加去除警告的2行代码(注释掉23,24行),是个什么效果呢?
运行结果
这么多警告,也难怪想去掉,看着脑壳都大,哈哈。