• tensorflow点滴笔记


    1、模型保存 

    模型保存需要使用函数 tf.train.Saver(),

    a)创建saver时,可以指定需要存储的tensor,如果没有指定,则全部保存。

    b) 创建saver时,可以指定保存的模型个数,利用max_to_keep=4,则最终会保存4个模型。

    c) saver.save()函数里面可以设定global_step,说明是哪一步保存的模型。

    d) 程序结束后,会生成四个文件:存储网络结构.meta、存储训练好的参数.data和.index、记录最新的模型checkpoint。

    示例: saver.save(sess, "model_ame, global_step=epoch)

     https://blog.csdn.net/liuxiao214/article/details/79048136

    2、"Can not convert a ndarray into a Tensor or Operation"报错

    https://blog.csdn.net/michael__corleone/article/details/79007425

    test_fc1, test_fc2, Ys = sess.run([test_fc1, test_fc2, fc3], 
                                                  feed_dict = {x1:xs1, x2:xs2, test_x1:test_img_raw, test_x2:test_img_raw1}) 

    错误指示是run这里出了错,原因:接收的参数名和run()里面的参数名一样了,一般 第一次不会报错,下一次运行中,test_fc1,test_fc2变量名已有了,直接跑会和你前面定义的test_fc1,test_fc2相关运算冲突。 所以将接收的变量名改了就可以了。

    3、tensorflow的axis理解

    https://blog.csdn.net/m0_37041325/article/details/77155517

    tensorFlow里的axis概念和numpy里是一样的,指tensor的某一维。举例:

    import tensorflow as tf
    
    x=tf.constant([[1.,2.],[5.,2.]])
    xShape=tf.shape(x)
    z1=tf.reduce_mean(x,axis=0)#沿axis=0操作
    z2=tf.reduce_mean(x,axis=1)#沿axis=1操作
    
    with tf.Session() as sess:
        xShapeValue,d1,d2=sess.run([xShape,z1,z2])
        print('shape= %s'%(xShapeValue))
        print(d1)
        print(d2)
    
    #输出:
    shape= [2 2]
    [3. 2.]
    [1.5 3.5]

    程序里定义了一个常量tensor,这个tensor的shape是[2,2]即2行2列(x00=1,x01=2,x10=5,x11=2),在程序中,当指定x在axis=0进行求平均操作时,就是指定x00,x10进行求平均,x01,x11进行求平均的操作,当指定x在axis=1进行求平均操作时,就是指定x00,x10进行求平均,x01,x11进行求平均操作。

    总结起来也就是说,当指定axis进行操作时,就使tensor就沿着这个axis变化,而其他的axis不变,按照这样的规则,遍历一次tensor,把得到的元素进行相应的操作。在上面的程序中,指定axis=0,操作,则axis=1这个轴上的数就不变。

    下面以几个函数的使用来更进一步说明,

    //1. tf.reduce_sum(input_tensor, axis) 沿着维度sxis计算和
    
    x= [[1, 1, 1], [1, 1, 1]]
    
    //求和,在所有维度操作,也就相当于对所有元素求和
    tf.reduce_sum(x) ==> 6
    
    //在维度0上操作,在这个例子中实际就是按列(维度1)求和
    tf.reduce_sum(x, 0) ==> [2, 2, 2]
    
    //在维度1上操作,在这个例子中实际就是按行(维度0)求和
    tf.reduce_sum(x, 1) ==> [3, 3]
    
    
    //2. tf.concat(values, axis):Concatenates tensors along one dimension
    t1 = [[1, 2, 3], [4, 5, 6]]  //2*3维 
    t2 = [[7, 8, 9], [10, 11, 12]]  //2*3维
    tf.concat([t1, t2], 0) == > [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]  
    //在维度0上连接,那么第一个维度会增加,在这里就是行会增多,结果是4*3维矩阵.
    
    x=tf.ones((3,2,2)) //shape (3,2,2)
    C=[x,x,x]
    print(tf.concat(C,2).shape) == > (3,2,6)
    // 再看这个例子,三维矩阵的连接,在第3个维度上,也就是维度2, 结果第三个维度会增加,也就是(3,2,6)

    4、 scope 命名方法 

    tf.name_scope()与tf.variable_scope()

    代码示例(以卷积层为例): https://blog.csdn.net/Jerr__y/article/details/70809528

    概念: https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-12-scope/

    tf.name_scope() 主要是用来管理命名空间的,这样子让我们的整个模型更加有条理。而 tf.variable_scope() 的作用是为了实现变量共享,它和 tf.get_variable() 来完成变量共享的功能。

    5、 获取变量维度信息

    https://blog.csdn.net/shuzfan/article/details/79051042

    6、 tf.estimator相关

    6.1、tf.estimator.Estimator介绍

    https://www.cnblogs.com/zongfa/p/10149483.html

    https://www.cnblogs.com/wushangjue/p/8334539.html

    6.2、tf.estimator.TrainSpec

    https://www.w3cschool.cn/tensorflow_python/tensorflow_python-s7gp2pdn.html

    7、tf.data.Dataset.shuffle

    7.1、bufer_size 理解

    https://www.cnblogs.com/wisir/p/12932154.html

    https://zhuanlan.zhihu.com/p/42417456

    tensorflow中的数据集类Dataset有一个shuffle方法,用来打乱数据集中数据顺序,训练时非常常用。其中shuffle方法有一个参数buffer_size,很令人费解。

    详细说明见上述链接。

    也就是说,buffer_size的作用就是存放数据集中部分数据的缓冲区大小,每次取数据是从缓冲区中随机取出一个item,该item是一个batch(与batch_size的关系),取出后再拿数据集中未在缓冲区出现过的数据(依次)去填充该缓冲区的空缺位置。

    附Tensorflow 基本操作链接: https://www.cnblogs.com/wuzhitj/p/6648585.html

  • 相关阅读:
    redis使用lua脚本遇到的问题
    redis使用scan count 返回数量不准确
    window系统下搭建本地的NuGet Server
    windows10使用docker发布.netcore程序
    windows10使用docker安装mysql
    windows10搭建redis4.0集群
    windows10配置redis主从复制
    windows10安装redis4.0
    mysql 共享排他锁
    mysql drop表以后恢复数据
  • 原文地址:https://www.cnblogs.com/ying-chease/p/9255526.html
Copyright © 2020-2023  润新知