当前位置: 移动技术网 > 网络运营>服务器>Linux > 荐 23-TensorFlow2.2+Keras版本新特性---自动图

荐 23-TensorFlow2.2+Keras版本新特性---自动图

2020年07月18日  | 移动技术网网络运营  | 我要评论

tensorflow-gpu安装

      笔者这里安装了anaconda3的最新版本,下载自清华大学镜像站,选择了ubuntu系统可用的Anaconda3-2020.02-Linux-x86_64.sh下载安装的,其它系统选择对应的版本即可,anaconda安装完成后,可以首先检查一下系统的显卡驱动版本,如果过老可以选择更新,不然后期使用可能会报错.

1 安装NVIDIA 驱动

    (1)禁用nouveau驱动

                sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

                键入以下内容,然后保存退出

                blacklist nouveau

                options nouveau modeset=0

                重新生成内核

                sudo update-initramfs -u

      重启计算机。然后终端中输入lsmod | grep nouveau 若没有输出,则表明禁用成功

    (2)删除旧的驱动

                sudo apt-get purge nvidia*3)安装NVIDIA 驱动

     添加ppa

                sudo add-apt-repository ppa:graphics-drivers/ppa

                sudo apt-get update

                推荐搜索的驱动

                ubuntu-drivers devices

      找到recommended所在的驱动的名称(driver   : nvidia-430 free recommended)

    (4)安装NVIDIA 驱动

                sudo apt-get install nvidia-4305)重启系统

    (6)校验是否成功

                nvidia-smi

                重启之前和重启之后输入该命令会发现有明显不同

                笔者的校验信息如下:
                +-----------------------------------------------------------------------------+
				| NVIDIA-SMI 430.64       Driver Version: 430.64       CUDA Version: 10.1     |
				|-------------------------------+----------------------+----------------------+
				| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
				| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
				|===============================+======================+======================|
				|   0  GeForce GTX 108...  Off  | 00000000:01:00.0  On |                  N/A |
				| 18%   58C    P0    89W / 300W |    667MiB / 11178MiB |      1%      Default |
				+-------------------------------+----------------------+----------------------+
				                                                                               
				+-----------------------------------------------------------------------------+
				| Processes:                                                       GPU Memory |
				|  GPU       PID   Type   Process name                             Usage      |
				|=============================================================================|
				|    0      1072      G   /usr/lib/xorg/Xorg                           245MiB |
				|    0      1943      G   compiz                                       203MiB |
				|    0      2215      G   fcitx-qimpanel                                 9MiB |
				|    0      3273      G   ...AAAAAAAAAAAACAAAAAAAAAA= --shared-files   202MiB |
				|    0     21542      G   /home/dream/pycharm-2020.1.3/jbr/bin/java      3MiB |
				+-----------------------------------------------------------------------------+

      然后正常安装需要的包就行了,因为清华大学镜像站下的Anaconda中更改了conda源,所以这里直接使用就行了.

	conda create -n tensorflow-2 python=3.7       #创建虚拟环境
	conda activate tensorflow-2							#激活创建的虚拟环境
	conda install tensorflow-gpu=2.2					#安装2.2版本的tensorflow-gpu(可以安装其余必要的包)
	pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python       #安装opencv(conda 安装会出现一些预期之外的问题,这里建议用pip安装)

查看版本

      导入包后,可以使用如下方式查看版本信息

# _*_ coding:utf-8 _*_
import tensorflow as tf
from tensorflow.keras import layers

print(tf.__version__)
print(tf.keras.__version__)
#result
==>2.2.0
==>2.3.0-tf

tf.keras简单编程流程

      如下是一个非常简单的tf.keras编码流程,这里只考虑代码的可行性,不考虑是否能得到充分的训练.

import numpy as np
#Sequential Model
model=tf.keras.Sequential()
model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(10,activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),loss=tf.keras.losses.categorical_crossentropy,
              metrics=[tf.keras.metrics.categorical_accuracy])
print(model.summary())

train_x=np.random.random((1000,72))
train_y=np.random.randint(0,10,(1000,10))

val_x=np.random.random((200,72))
val_y=np.random.randint(0,10,(200,10))

model.fit(train_x,train_y,epochs=10,batch_size=100,validation_data=(val_x,val_y))

tf.function装饰器实现自动图

      在TensorFlow2.x版本中,可以通过自动图(AutoGraph)功能,将普通的Python控制流语句转成基本张量的运算图.这大大简化了开发工作,这种方式明显优于以tf.cond静态图结点进行判断的编程方式,在具体实现的流程方面,可以用tf.function装饰器修饰Python函数,将其自动转化成张量运算图

import tensorflow as tf
@tf.function
def autograph(input_data):
    if tf.reduce_sum(input_data)>0:                                      #控制流语句
        return input_data-1	
    else:				
        return input_data+1
a=autograph(tf.constant([-6,4]))
b=autograph(tf.constant([4,2]))
print(a.numpy(),b.numpy())
#result
==>[-5  5] [3 1]

整体流程

      该流程的基本逻辑是组织随机数(不企图模型能学习出随机的样本规律)作为数据输入,然后构建模型进行训练,训练过程使用了常用的回调函数等功能.(训练最开始选用了tensorflow-gpu=2.1版本,但是迭代器进行数据传输过程中会报错:Error occurred when finalizing GeneratorDataset iterator: Cancelled: Operation was cancelled - TensorFlow,这里升级到2.2版本,就无报错信息了)

# _*_ coding:utf-8 _*_
import tensorflow as tf
from tensorflow.keras import layers
import numpy as np
import random
import os


def train_generate():
    while 1:
        for i in range(80):
            x=np.random.random((12,72))
            y=np.random.randint(0,10,(12,10))
            yield x,y


def test_generate():
    while 1:
        for i in range(20):
            x=np.random.random((12,72))
            y=np.random.randint(0,10,(12,10))
            yield x,y

@tf.function
def autograph(input_tensor):
    if tf.reduce_mean(input_tensor)>0.1:
        return input_tensor//2
    else:
        return input_tensor

def model(input_layer):
    x=layers.Dense(64,activation='relu')(input_layer)

    x=layers.Lambda(autograph)(x)

    x=layers.Dense(10,activation='softmax')(x)
    return tf.keras.models.Model(inputs=input_layer,outputs=x)


random.seed(36)
log_dir='./log'

mod=model(layers.Input(shape=(72)))
mod.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),loss=tf.keras.metrics.categorical_crossentropy,metrics=['accuracy'])
print(mod.summary())
logging = tf.keras.callbacks.TensorBoard(log_dir=log_dir)
checkpoint = tf.keras.callbacks.ModelCheckpoint(log_dir +'/'+ 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',
                             monitor='val_loss', save_best_only=True, mode='min',
                             save_weights_only=True, period=1)
reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3, verbose=1)
early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=1)

if os.path.exists( log_dir +'/'+ 'train_weights.h5'):
    mod.load_weights(log_dir+'/' + 'train_weights.h5',by_name=True)
mod.fit(train_generate(),
        steps_per_epoch=80,
        validation_data=test_generate(),
        validation_steps=20,
        verbose=1,
        initial_epoch=0,
        epochs=100,
        callbacks=[logging,checkpoint,reduce_lr,early_stopping])
mod.save_weights(log_dir+'/'+'train_weights.h5')

本文地址:https://blog.csdn.net/qq_37972530/article/details/107398544

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网