美文网首页
tensorflow Note

tensorflow Note

作者: 霞客环肥 | 来源:发表于2019-05-04 21:33 被阅读0次

    1 搭建步骤(单层感知机)

    1. 输入和标签 tf.placeholder
    x = tf.placeholder(tf.float32, [None, 28, 28, 1])
    t = tf.placeholderI(tf.float32, [None, 10])
    
    x = tf.reshape(x, [-1, 784])
    
    1. 定义参数变量及初始化 tf.Variable
    w = tf.Variable(tf.zeros([784, 10]))
    b = tf.Variable(tf.zeros([10]))
    
    init_op = tf.global_variables_initializer()
    
    1. 定义模型
    y = tf.nn.softmax(tf.matmul(x, w) + b)
    
    1. 确定损失函数
    cross_entropy = -tf.reduce_mean(t * tf.log(y))
    
    1. 关于精度
    is_correct = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1))
    accuracy = tf.reduce_mean(is_correct, tf.float32)
    
    1. 优化算法
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.003)
    train_step = optimiser.minimize(cross_entropy)
    
    1. 训练模型
      7.1 参数初始化
    with tf.Session() as sess:
      sess.run(init_op)
    

    7.2 迭代的执行train_step

    with tf.Session() as sess:
      for step in range(1000):
        batch_xs,  batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, t: batch_ys})
    
        if step%100 == 0:
          acc, loss = sess.run([accuracy, cross_entropy],
                                            feed_dict={x: batch_xs, t: batch_ys})
          acc, loss = sess.run([accuracy, cross_entropy],
                                            feed_dict={x:mnist.test.images, t: mnist.test.labels})
    

    2 搭建步骤(多层感知机)

    1. 输入和标签 tf.placeholder
    x = tf.placeholder(tf.float32, [None, 28, 28, 1])
    t = tf.placeholderI(tf.float32, [None, 10])
    
    x = tf.reshape(x, [-1, 784])
    
    1. 定义参数变量及初始化 tf.Variable, 如果使用ReLU 激活函数,偏置向量常常初始化为小的正值,使得神经元在一
      开始就会工作在ReLU 的非零区域内。
    K = 200
    L = 100
    M = 60
    N = 30
    
    w1 = tf.Variable(tf.truncated_normal([784, K], stddev = 0.1))
    b1= tf.Variable(tf.ones([K]/10))
    
    w2 = tf.Variable(tf.truncated_normal([K, L], stddev = 0.1))
    b2= tf.Variable(tf.ones([L]/10))
    
    w3 = tf.Variable(tf.truncated_normal([L, M], stddev = 0.1))
    b3= tf.Variable(tf.ones([M]/10))
    
    w4 = tf.Variable(tf.truncated_normal([M, N], stddev = 0.1))
    b4= tf.Variable(tf.ones([N]/10))
    
    w5 = tf.Variable(tf.truncated_normal([N, 10], stddev = 0.1))
    b5= tf.Variable(tf.ones([10]/10))
    
    init_op = tf.global_variables_initializer()
    
    1. 定义模型, 在训练时对隐藏层的输出实施dropout 操作,以1 - pkeep
      的概率随机丢弃神经元的输出,并在反向传播梯度时不再更新相应的权重。而在推理时恢
      复所有神经元的输出,间接改善了网络的泛化能力。
    pkeerp = tf.placeholder(tf.float32)
    
    y1 = tf.nn.relu(tf.matmul(x, w1) + b1)
    y1d = tf.nn.dropout(y1, pkeep)
    
    y2 = tf.nn.relu(tf.matmul(y1, w2) + b2)
    y2d = tf.nn.dropout(y2, pkeep)
    
    y3 = tf.nn.relu(tf.matmul(y2, w3) + b3)
    y3d = tf.nn.dropout(y3, pkeep)
    
    y4 = tf.nn.relu(tf.matmul(y3, w4) + b4)
    y4d = tf.nn.dropout(y4, pkeep)
    
    y = tf.nn.softmax(tf.matmul(y4, w5) + b5)
    
    1. 确定损失函数
    logits = tf.matmul(y4, w5) + b5
    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels=t)
    
    1. 关于精度
    is_correct = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1))
    accuracy = tf.reduce_mean(is_correct, tf.float32)
    
    1. 优化算法, 可以采用更好的优化算法,例如AdamOptimizer。随着迭代过程的次数,学习速率将指
      数级衰减,在模型训练后期可以得到一个更稳定的精度和损失曲线。
    lr = tf.placeholder(tf.float32)
    optimizer = tf.train.AdamOptimizer(lr)
    train_step = optimiser.minimize(cross_entropy)
    

    关于学习率的衰减,

    def lr(step):
      max_lr = 0.003
      min_lr = 0.0001
      decay_speed = 2000.0
    
      return min_lr + (max_lr - min_lr)*math.exp(-step/decay_speed)
    
    1. 训练模型
      回顾上述,共有4个placeholder, 所以在feed_dict时,需要给喂入4个数据。
      7.1 参数初始化
    with tf.Session() as sess:
      sess.run(init_op)
    

    7.2 迭代的执行train_step

    with tf.Session() as sess:
      for step in range(1000):
        batch_xs,  batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, t: batch_ys, pkeep:0.75, lr:lr(step)})
    
        #在测试时,dropout取的概率取1,即保留所有的神经元。
        if step%100 == 0:
          acc, loss = sess.run([accuracy, cross_entropy],
                                            feed_dict={x: batch_xs, t: batch_ys, pkeep: 1})
         
          acc, loss = sess.run([accuracy, cross_entropy],
                                            feed_dict={x:mnist.test.images, t: mnist.test.labels, pkeep: 1 })
    

    3 搭建步骤(卷积神经网络)

    1. 输入和标签 tf.placeholder
    x = tf.placeholder(tf.float32, [None, 28, 28, 1])
    t = tf.placeholderI(tf.float32, [None, 10])
    
    x = tf.reshape(x, [-1, 784])
    
    1. 定义参数变量及初始化 tf.Variable, 如果使用ReLU 激活函数,偏置向量常常初始化为小的正值,使得神经元在一
      开始就会工作在ReLU 的非零区域内。
    K = 6
    L = 12
    M = 24
    N = 200
    
    w1 = tf.Variable(tf.truncated_normal([6, 6, 1, K], stddev = 0.1))
    b1= tf.Variable(tf.ones([K]/10))
    
    w2 = tf.Variable(tf.truncated_normal([5, 5, K, L], stddev = 0.1))
    b2= tf.Variable(tf.ones([L]/10))
    
    w3 = tf.Variable(tf.truncated_normal([4, 4, L, M], stddev = 0.1))
    b3= tf.Variable(tf.ones([M]/10))
    
    w4 = tf.Variable(tf.truncated_normal([7*7*M, N], stddev = 0.1))
    b4= tf.Variable(tf.ones([N]/10))
    
    w5 = tf.Variable(tf.truncated_normal([N, 10], stddev = 0.1))
    b5= tf.Variable(tf.ones([10]/10))
    
    init_op = tf.global_variables_initializer()
    
    1. 定义模型, 在训练时对全连接层的输出实施dropout 操作,以1 - pkeep
      的概率随机丢弃神经元的输出,并在反向传播梯度时不再更新相应的权重。而在推理时恢
      复所有神经元的输出,间接改善了网络的泛化能力。
    pkeerp = tf.placeholder(tf.float32)
    
    y1 = tf.nn.relu(tf.nn.conv2d(x, w1, stride = [1, 1, 1, 1], padding = 'SAME') + b1)
    
    y2 = tf.nn.relu(tf.nn.conv2d(y1, w2, stride = [1, 2, 2, 1], padding='SAME')+ b2)
    
    y3 = tf.nn.relu(tf.nn.conv2d(y2, w3, stride=[1, 2, 2, 1], padding='SAME') + b3)
    
    yy = tf.reshape(y3, shape=[-1, 7*7*M])
    y4 = tf.nn.relu(tf.matmul(yy, w4) + b4)
    y4d = tf.nn.dropout(y4, pkeep)
    
    logits  = tf.matmul(y4, w5) + b5
    y = tf.nn.softmax(tf.matmul(y4, w5) + b5)
    
    1. 确定损失函数
    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels=t)
    
    1. 关于精度
    is_correct = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1))
    accuracy = tf.reduce_mean(is_correct, tf.float32)
    
    1. 优化算法, 可以采用更好的优化算法,例如AdamOptimizer。随着迭代过程的次数,学习速率将指
      数级衰减,在模型训练后期可以得到一个更稳定的精度和损失曲线。
    lr = tf.placeholder(tf.float32)
    optimizer = tf.train.AdamOptimizer(lr)
    train_step = optimiser.minimize(cross_entropy)
    

    关于学习率的衰减,

    def lr(step):
      max_lr = 0.003
      min_lr = 0.0001
      decay_speed = 2000.0
    
      return min_lr + (max_lr - min_lr)*math.exp(-step/decay_speed)
    
    1. 训练模型
      回顾上述,共有4个placeholder, 所以在feed_dict时,需要给喂入4个数据。
      7.1 参数初始化
    with tf.Session() as sess:
      sess.run(init_op)
    

    7.2 迭代的执行train_step

    with tf.Session() as sess:
      for step in range(1000):
        batch_xs,  batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, t: batch_ys, pkeep:0.75, lr:lr(step)})
    
        #在测试时,dropout取的概率取1,即保留所有的神经元。
        if step%100 == 0:
          acc, loss = sess.run([accuracy, cross_entropy],
                                            feed_dict={x: batch_xs, t: batch_ys, pkeep: 1})
         
          acc, loss = sess.run([accuracy, cross_entropy],
                                            feed_dict={x:mnist.test.images, t: mnist.test.labels, pkeep: 1 })
    

    4 tensorflow语句笔记

    1. 生成在[minval, maxval)之间,符合均匀分布的数组。

    tf.random.uniform(
    shape,
    minval=0,
    maxval=None,
    dtype=tf.dtypes.float32,
    seed=None,
    name=None
    )

    1. 生成截断正规分布随机数组。

    tf.random.truncated_normal(
    shape,
    mean=0.0,
    stddev=1.0,
    dtype=tf.dtypes.float32,
    seed=None,
    name=None
    )

    1. 每一层都创建于一个唯一的tf.name_scope之下,创建于该作用域之下的所有元素都将带有其前缀。

    with tf.name_scope('hidden1') as scope:

    1. 在张量中插入一维。axis表示插入这一维的位置。

    tf.expand_dims(
    input,
    axis=None,
    name=None,
    dim=None
    )

    1. 全局实例tf.Graph

    with tf.Graph().as_default():

    1. 读取变量是:文件名列表 + 内存列表
      其中文件名列表使用tf.train.string_input_producer,传入的是文件名list,返回文件名列表。

    tf.train.string_input_producer(
    string_tensor,
    num_epochs=None,
    shuffle=True,
    seed=None,
    capacity=32,
    shared_name=None,
    name=None,
    cancel_op=None
    )

    开始将数据喂入的语句是,tf.train.start_queue_runners

    相关文章

      网友评论

          本文标题:tensorflow Note

          本文链接:https://www.haomeiwen.com/subject/iixnnqtx.html