zoukankan      html  css  js  c++  java
  • TensorFlow学习和整理

    一、介绍

    Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

    概念:
    2015.11 Google开源
    Tensor是张量,表示N维数组;Flow是流,表示基于数据流图计算。TensorFlow运行过程就是张量从图的一端运行到另一端的过程。数据流图:TensorFlow的核心所在,黑盒子;节点:数学操作(加减乘除等);线:连接各节点,节点之间相互联系的多维线型数组,就是张量。

    特点:
    灵活:只要有数据流图就能用TensorFlow
    可移植性:支持CPU和GPU,适于台式机、服务器、手机移动端
    自动求微分:内部实现了自动对于各种给定目标函数求导的公式
    语言:Python,C++,Java,Go
    性能高度优化

    优秀的模拟网站:
    http://playground.tensorflow.org/#activation=sigmoid&batchSize=10&dataset=circle&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=10&networkShape=4,3&seed=0.16337&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false

    为啥选TensorFlow:
    TensorFlow(最多)、Torch、Theano、Caffe、None、others

    二、基础语法

    数据属性:
    在这里插入图片描述
    其中用的最多的还是前几种数值型的:
    tf.float32、tf.float64;
    tf.int8、tf.int16、tf.int32、tf.int64;
    tf.uint8;
    tf.string;

    节点:
    在这里插入图片描述

    基本用法:
    在这里插入图片描述

    程序结构:在这里插入图片描述

    TensorFlow图:
    在这里插入图片描述

    TensorFlow会话:
    在这里插入图片描述
    在这里插入图片描述
    TensorFlow张量:
    在这里插入图片描述
    TensorFlow变量:
    在这里插入图片描述

    TensorFlow feed:
    在这里插入图片描述

    TensorFlow控制依赖:
    在这里插入图片描述
    TensorFlow设备:
    在这里插入图片描述

    TensorFlow变量作用域:
    在这里插入图片描述

    TensorFlow变量作用域:
    在这里插入图片描述

    TensorFlow可视化:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    出错解决:tensorboard 报错OSError: [Errno 22] Invalid argument

    TensorFlow线程和队列:
    本质是异步计算的
    在这里插入图片描述

    TensorFlow 数据读取:
    在这里插入图片描述

    TensorFlow模型保存和提取:
    在这里插入图片描述

    TensorFlow分布式训练:

    在这里插入图片描述

    在这里插入图片描述

    三、实例

    TensorFlow实现逻辑回归:

    # -- encoding:utf-8 --
    """
    complicated by DingJing at 2019.8.8
    用TensorFlow实现线性回归函数
    """
    import numpy as np
    import tensorflow as tf
    import matplotlib.pyplot as plt
    
    # 1. 构造数据
    np.random.seed(28)
    N = 100
    x_data = np.linspace(0, 6, N) + np.random.normal(loc=0.0, scale=2, size=N)
    y_data = 14 * x_data - 7 + np.random.normal(loc=0.0, scale=5.0, size=N)
    # 将x和y设置成为矩阵
    x_data.shape = -1, 1
    y_data.shape = -1, 1
    
    # 2. 定义两个placeholder存放输入数据
    x = tf.placeholder(tf.float32, [None, 1])
    y = tf.placeholder(tf.float32, [None, 1])
    
    # 3. 模型构建
    # 定义一个变量w和变量b
    w = tf.Variable(initial_value=tf.random_uniform(shape=[1], minval=-1.0, maxval=1.0), name='w')
    b = tf.Variable(initial_value=tf.zeros([1]), name='b')
    # 构建一个预测值
    y_hat = w * x + b
    # 构建一个损失函数:以MSE作为损失函数(预测值和实际值之间的平方和)
    loss = tf.reduce_mean(tf.square(y_hat - y), name='loss')
    # 实现反向传播算法(以随机梯度下降的方式优化损失函数;在优化的过程中,是让loss函数最小化)
    train = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
    
    # 4.运行
    with tf.Session() as sess:
        # 初始化:全局变量更新
        sess.run(tf.global_variables_initializer())
        # 进行训练(n次)
        for step in range(100):
            # 模型训练
            sess.run(train, feed_dict={x: x_data, y: y_data})
            # 获得预测值
            prediction_value = sess.run(y_hat, feed_dict={x: x_data})
    
        # 画图显示拟合结果
        plt.figure()
        plt.scatter(x_data, y_data)  # 散点是真实值
        plt.plot(x_data, prediction_value, 'r-', lw=5)  # 曲线是预测值
        plt.show()
    

    方法二:

    import tensorflow as tf
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 使用numpy生成200个随机点
    x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
    noise = np.random.normal(0, 0.02, x_data.shape)
    y_data = np.square(x_data) + noise
    
    
    # 定义两个placeholder存放输入数据
    x = tf.placeholder(tf.float32, [None, 1])
    y = tf.placeholder(tf.float32, [None, 1])
    
    # 定义神经网络中间层
    Weights_L1 = tf.Variable(tf.random_normal([1, 10]))
    biases_L1 = tf.Variable(tf.zeros([1, 10]))  # 加入偏置项
    Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + biases_L1
    L1 = tf.nn.tanh(Wx_plus_b_L1)  # 加入激活函数
    
    # 定义神经网络输出层
    Weights_L2 = tf.Variable(tf.random_normal([10, 1]))
    biases_L2 = tf.Variable(tf.zeros([1, 1]))  # 加入偏置项
    Wx_plus_b_L2 = tf.matmul(L1, Weights_L2) + biases_L2
    prediction = tf.nn.tanh(Wx_plus_b_L2)  # 加入激活函数
    
    # 定义损失函数(均方差函数)
    loss = tf.reduce_mean(tf.square(y - prediction))
    # 定义反向传播算法(使用梯度下降算法训练)
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    
    with tf.Session() as sess:
        # 变量初始化
        sess.run(tf.global_variables_initializer())
        # 训练2000次
        for i in range(2000):
            sess.run(train_step, feed_dict={x: x_data, y: y_data})
    
        # 获得预测值
        prediction_value = sess.run(prediction, feed_dict={x: x_data})
    
        # 画图
        plt.figure()
        plt.scatter(x_data, y_data)  # 散点是真实值
        plt.plot(x_data, prediction_value, 'r-', lw=5)  # 曲线是预测值
        plt.show()
    
    
  • 相关阅读:
    几种函数调用方式
    MOSS 2010:Visual Studio 2010开发体验(11)——扩展SharePoint Explorer
    MOSS 2010:Visual Studio 2010开发体验(14)——列表开发之事件接收器
    MOSS 开发之服务帐号过期的问题
    关于工作流(Workflow Foundation)的一些总结归纳
    Infopath 2010的变化
    MOSS 2010:Visual Studio 2010开发体验(13)——列表开发之列表实例
    MTOM效率测试
    MTOM以及在WCF中的应用
    在Outlook中设置农历生日周期性事件
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059161.html
Copyright © 2011-2022 走看看