zoukankan      html  css  js  c++  java
  • tensorflow2.0学习笔记第一章第二节

    1.2常用函数

    本节目标:掌握在建立和操作神经网络过程中常用的函数

    # 常用函数
    
    
    import tensorflow as tf
    import numpy as np
    
    # 强制Tensor的数据类型转换
    x1 = tf.constant([1,2,3],dtype = tf.float64)
    print(x1)
    x2 = tf.cast(x1,tf.int32)
    print(x2)
    # 计算张量中最小的元素
    print(tf.reduce_min(x2))
    # 计算张量中最大的元素
    print(tf.reduce_max(x2))
    输出结果:
    tf.Tensor([1. 2. 3.], shape=(3,), dtype=float64)
    tf.Tensor([1 2 3], shape=(3,), dtype=int32)
    tf.Tensor(1, shape=(), dtype=int32)
    tf.Tensor(3, shape=(), dtype=int32)
    # 理解axis,在一个二位张量或者数组中,可以通过调整axis等于0或者1控制执行维度
    # axis=0代表跨行(经度,down),而axis=1跨列(纬度,across)
    # 不指定axis,则所有元素参与计算
    x = tf.constant([[1,2,3],
                     [4,5,6]])
    print(x)
    print(tf.reduce_mean(x)) # 求平均[2,5],平均为3
    print(tf.reduce_sum(x,axis = 1)) # 求总和按行操作
    输出结果:
    tf.Tensor(
    [[1 2 3]
     [4 5 6]], shape=(2, 3), dtype=int32)
    tf.Tensor(3, shape=(), dtype=int32)
    tf.Tensor([ 6 15], shape=(2,), dtype=int32)
    # tf.Variable()将变量标记为可训练,被标记的变量会在反向传播中被记录梯度信息
    w = tf.Variable(tf.random.normal([2,2],mean= 0,stddev =1))
    print(w)
    输出结果:
    <tf.Variable 'Variable:0' shape=(2, 2) dtype=float32, numpy=
    array([[ 0.47072804, -0.7259878 ],
           [-1.6562318 ,  0.15564619]], dtype=float32)>
    # 常用的运算函数
    # 加法
    a = tf.constant([1,2,3],dtype = tf.float32)
    b = tf.constant([4,5,6],dtype = tf.float32)
    print(tf.add(a,b))
    # 减法
    print(tf.subtract(a,b))
    # 乘法
    print(tf.multiply(a,b))
    # 除法
    print(tf.divide(b,a))
    # 平方
    print(tf.square(a))
    # 次方
    print(tf.pow(a,3))
    # 开放
    print(tf.sqrt(a))
    # 矩阵乘法
    c = tf.ones([3,2])
    d = tf.fill([2,3],6.)
    print(tf.matmul(c,d))
    输出结果:
    tf.Tensor([5. 7. 9.], shape=(3,), dtype=float32)
    tf.Tensor([-3. -3. -3.], shape=(3,), dtype=float32)
    tf.Tensor([ 4. 10. 18.], shape=(3,), dtype=float32)
    tf.Tensor([4.  2.5 2. ], shape=(3,), dtype=float32)
    tf.Tensor([1. 4. 9.], shape=(3,), dtype=float32)
    tf.Tensor([ 1.  8. 27.], shape=(3,), dtype=float32)
    tf.Tensor([1.        1.4142135 1.7320508], shape=(3,), dtype=float32)
    tf.Tensor(
    [[12. 12. 12.]
     [12. 12. 12.]
     [12. 12. 12.]], shape=(3, 3), dtype=float32)  
    # 切分传入张量的第一维度,生成输入特征/标签配对,构成数据集
    features = tf.constant([12,23,10,17])
    labels = tf.constant([0,1,1,0])
    # 对特征和标签进行一一配对
    dataset = tf.data.Dataset.from_tensor_slices((features,labels))
    print(dataset)
    for element in dataset:
        print(element)
    输出结果:
    <TensorSliceDataset shapes: ((), ()), types: (tf.int32, tf.int32)>
    (<tf.Tensor: id=286, shape=(), dtype=int32, numpy=12>, <tf.Tensor: id=287, shape=(), dtype=int32, numpy=0>)
    (<tf.Tensor: id=288, shape=(), dtype=int32, numpy=23>, <tf.Tensor: id=289, shape=(), dtype=int32, numpy=1>)
    (<tf.Tensor: id=290, shape=(), dtype=int32, numpy=10>, <tf.Tensor: id=291, shape=(), dtype=int32, numpy=1>)
    (<tf.Tensor: id=292, shape=(), dtype=int32, numpy=17>, <tf.Tensor: id=293, shape=(), dtype=int32, numpy=0>)
    # 求导数运算
    with tf.GradientTape() as tape:
        w= tf.Variable(tf.constant(3.0))
        loss = tf.pow(w,2)
    # 对w2求w的倒数
    grad = tape.gradient(loss,w)
    print(grad)
    输出结果:
    tf.Tensor(6.0, shape=(), dtype=float32)
    # 求导数运算
    with tf.GradientTape() as tape:
        w= tf.Variable(tf.constant(3.0))
        loss = tf.pow(w,2)
    # 对w2求w的倒数
    grad = tape.gradient(loss,w)
    print(grad)
    输出结果:
    0 one
    1 two
    2 three
    # 独热编码:将张量中的每个元素按照规律独立编码,编码中0为否1为是
    labels = tf.constant([0,1,2,3])
    classes = 4
    output = tf.one_hot(labels,depth = classes)
    print(output)
    输出结果:
    tf.Tensor(
    [[1. 0. 0. 0.]
     [0. 1. 0. 0.]
     [0. 0. 1. 0.]
     [0. 0. 0. 1.]], shape=(4, 4), dtype=float32)
    # 用softmax函数使得输出符合概率分布,将输出用e为底y为指数,求出每个输出的概率
    # 对概率进行归一化操作
    y = tf.constant([1.01,2.01,-0.66])
    y_pro = tf.nn.softmax(y)
    print("After softmax,y_pro is:",y_pro)
    输出结果:
    After softmax,y_pro is: tf.Tensor([0.25598174 0.69583046 0.0481878 ], shape=(3,), dtype=float32)
    # 用assign_sub函数对参数进行自更新,赋值操作(更新参数为可训练)
    w = tf.Variable(4)
    # 对w进行自减一操作w = w -1
    w.assign_sub(1)
    print(w)
    输出结果:
    <tf.Variable 'Variable:0' shape=() dtype=int32, numpy=3>
    
     
    # 返回张量沿指定维度最大值的索引
    test = np.array([[1,2,3],
                    [4,5,6],
                    [7,8,9],
                    [10,11,12]])
    print(test)
    print(tf.argmax(test,axis = 0))
    print(tf.argmax(test,axis = 1))
    
    # 判断两个数是否相等,bool类型
    correct = tf.equal(1,1)
    print(correct)
    输出结果:
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    tf.Tensor([3 3 3], shape=(3,), dtype=int64)
    tf.Tensor([2 2 2 2], shape=(4,), dtype=int64)
    tf.Tensor(True, shape=(), dtype=bool)

    本节对各个函数运用,对神经网络搭建和操作十分重要,请大家务必掌握。
    
    





  • 相关阅读:
    如何得到数据绑定的树节点的父节点
    ImageBrush中的图片如何加载到到MemoryStream
    C#中动态加载和卸载DLL
    SetProcessWorkingSetSize减少内存占用
    wpf中如何改变Listbox选中项的颜色
    怎样把Visual Studio与Perforce关联起来
    在WPF里面如何使用FolderBrowserDialog
    关于WPF的ComboBox中Items太多而导致加载过慢的问题(转载)
    得到系统中所有正打开的文件
    把ResourceDictionary保存为文件,从外部xaml文件加载ResourceDictionary
  • 原文地址:https://www.cnblogs.com/wigginess/p/13048367.html
Copyright © 2011-2022 走看看