深度学习#tensorflow进阶

前提

  1. 变量:

变量

  1. 变量的创建
  2. 变量的初始化
  3. 变量的作用域

定义:变量也是一种op,能够被存储持久化,他的值就是张量,默认被训练

变量op

1.变量的初始化:变量的初始化必须在模型的其它操作运行之前先明确地完成。

# 变量的创建tf.Variable
var = tf.Variable(tf.random_normal([2, 3], mean=0.0, stddev=1.0))
# 必须做一步显示的初始化op
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    print(sess.run(var))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Variable

此时会发现报错,问题出现在,任何op都得在绘画中画出来,所以得在with中写上init_op

with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(var))
变量可视化
# 把程序的图结构写入事件文件,graph:把指定的图放到文件中去
    filewriter = tf.summary.FileWriter('./summer/test', graph=sess.graph)
# 这里注意----多一个/---意义是让她去里面找
# 在命令行做事
tensorboard --logdir='./summer/test/'

在这里插入图片描述

tensorfrom—实现线性回归

前提准备
  1. 准备好1特征值和目标值
  2. 建立模型,随机初始化准备一个权重w,和一个偏量b
  3. 求损失函数,误差 loss均方误差
  4. 梯度下降去优化损失过程,指定学习率
api

(m,n)(m个样本,n个特征)

  1. 矩阵运算
    tf.matmul(x,w)
  2. 平方
    tf.square(error)
  3. 均值
    tf.reduct_mean(error)
  4. 梯度下降api
    tf.train.GradientDescentOptimzer(learning_rate)
    learning_rate—学习率

下面我们就用手写来,写一个线性回归

import tensorflow as tf


def lien():
    """
    自实现线性回归
    """
    # 1.准备数据,x[100,10]--100个样本 1个特征 ,y[100] ----目标值100
    x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name='x_dota')
    # 矩阵乘法必须是2维的
    y_true = tf.matmul(x, [[0.7]])+0.8

    # 2.建立线性回归模型,1.个特征,1个权重,1个偏置 y = wx + b
    # 随机给一个权重和偏置,让他去计算损失,然后在优化
    # 用变量定义才能优化
    weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='w')
    bias = tf.Variable(0.0, name='0')

    y_predict = tf.matmul(x, weight) + bias

    # 建立损失函数,均方误差
    loss = tf.reduce_mean(tf.square(y_true - y_predict))

    # 梯度下降优化损失 leaning_rate,???
    train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

    init_op = tf.global_variables_initializer()
    # 通过绘画运行程序

    with tf.Session() as sess:
        # 初始化变量
        sess.run(init_op)

        # 打印随机初始化
        print('随机初始化的参数权重为:%f,偏置为:%f'%(weight.eval(), bias.eval()))
        # # 运行优化
        # sess.run(train_op)
        # print('优化参数权重为:%f,偏置为:%f' % (weight.eval(), bias.eval()))

        # 循环训练 运行优化
        for i in range(100):
            sess.run(train_op)
            print('第%d次优化参数权重为:%f,偏置为:%f' % (i, weight.eval(), bias.eval()))

    return None


if __name__ == "__main__":
    lien()


作用域-tensorfrom–作用域

with tf.variable_scope('youhua'):

增加变量显示

目的:观察模型参数、损失值等变量的变化
1.收集变量

	tf.summary.scalar('losses', loss) # 收集损失函数和准确率等单值变量

    tf.summary.histogram('weights',weight) # 收集高纬的变量参数

2.合并变量写入事件文件

merged = tf.summary.merge_all()
# 运行合并的tensor
summery = sess.run(merged)
# 添加
filerwrite.add_summary(summery, i )

改进后:

import tensorflow as tf


def lien():
    """
    自实现线性回归
    """
    with tf.variable_scope('dota'):
        # 1.准备数据,x[100,10]--100个样本 1个特征 ,y[100] ----目标值100
        x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name='x_dota')
        # 矩阵乘法必须是2维的
        y_true = tf.matmul(x, [[0.7]])+0.8

    with tf.variable_scope('modle'):
        # 2.建立线性回归模型,1.个特征,1个权重,1个偏置 y = wx + b
        # 随机给一个权重和偏置,让他去计算损失,然后在优化
        # 用变量定义才能优化
        weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='w')
        bias = tf.Variable(0.0, name='0')

        y_predict = tf.matmul(x, weight) + bias

    with tf.variable_scope('loss'):
        # 建立损失函数,均方误差
        loss = tf.reduce_mean(tf.square(y_true - y_predict))
    with tf.variable_scope('youhua'):
        # 梯度下降优化损失 leaning_rate,???
        train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
        init_op = tf.global_variables_initializer()
        # 通过绘画运行程序
    # 1.收集tensor
    tf.summary.scalar('losses', loss) # 收集损失函数和准确率等单值变量

    tf.summary.histogram('weights',weight) # 收集高纬的变量参数
    # 2.合并变量,写入事件文件
    merged = tf.summary.merge_all()


    with tf.Session() as sess:
        # 初始化变量
        sess.run(init_op)

        # 打印随机初始化
        print('随机初始化的参数权重为:%f,偏置为:%f'%(weight.eval(), bias.eval()))
        # # 运行优化
        # sess.run(train_op)
        # print('优化参数权重为:%f,偏置为:%f' % (weight.eval(), bias.eval()))
        # 建立事件文件
        filerwrite = tf.summary.FileWriter('./summer/test/',graph=sess.graph)

        # 循环训练 运行优化
        for i in range(100):
            sess.run(train_op)
            # 运行合并的tensor
            summery = sess.run(merged)
            # 添加,每次迭代都要写i
            filerwrite.add_summary(summery, i)
            print('第%d次优化参数权重为:%f,偏置为:%f' % (i, weight.eval(), bias.eval()))

    return None


if __name__ == "__main__":
    lien()


模型的加载和保存

# 保存模型
saver.save(sess, './summer/model  ')
  # 加载模型,覆盖模型,从上次训练的参数开始
        if os.path.exists('./summer/checkpoint'):
            saver.restore(sess, './summer/model  ')

今日总结

import os

import tensorflow as tf


def lien():
    """
    自实现线性回归
    """
    with tf.variable_scope('dota'):
        # 1.准备数据,x[100,10]--100个样本 1个特征 ,y[100] ----目标值100
        x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name='x_dota')
        # 矩阵乘法必须是2维的
        y_true = tf.matmul(x, [[0.7]])+0.8

    with tf.variable_scope('modle'):
        # 2.建立线性回归模型,1.个特征,1个权重,1个偏置 y = wx + b
        # 随机给一个权重和偏置,让他去计算损失,然后在优化
        # 用变量定义才能优化
        weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='w')
        bias = tf.Variable(0.0, name='0')

        y_predict = tf.matmul(x, weight) + bias

    with tf.variable_scope('loss'):
        # 建立损失函数,均方误差
        loss = tf.reduce_mean(tf.square(y_true - y_predict))
    with tf.variable_scope('youhua'):
        # 梯度下降优化损失 leaning_rate,???
        train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
        init_op = tf.global_variables_initializer()
        # 通过绘画运行程序
    # 1.收集tensor
    tf.summary.scalar('losses', loss) # 收集损失函数和准确率等单值变量

    tf.summary.histogram('weights',weight) # 收集高纬的变量参数
    # 2.合并变量,写入事件文件
    merged = tf.summary.merge_all()

    # 定义一个保存模型的实例
    saver = tf.train.Saver()

    with tf.Session() as sess:
        # 初始化变量
        sess.run(init_op)

        # 打印随机初始化
        print('随机初始化的参数权重为:%f,偏置为:%f'%(weight.eval(), bias.eval()))
        # # 运行优化
        # sess.run(train_op)
        # print('优化参数权重为:%f,偏置为:%f' % (weight.eval(), bias.eval()))

        # 建立事件文件
        filerwrite = tf.summary.FileWriter('./summer/test/',graph=sess.graph)

        # 加载模型,覆盖模型,从上次训练的参数开始
        if os.path.exists('./summer/checkpoint'):
            saver.restore(sess, './summer/model  ')

        # 循环训练 运行优化
        for i in range(500):
            sess.run(train_op)
            # 运行合并的tensor
            summery = sess.run(merged)
            # 添加,每次迭代都要写i
            filerwrite.add_summary(summery, i)
            print('第%d次优化参数权重为:%f,偏置为:%f' % (i, weight.eval(), bias.eval()))

        saver.save(sess, './summer/model  ')



    return None


if __name__ == "__main__":
    lien()


发布了39 篇原创文章 · 获赞 1 · 访问量 380

猜你喜欢

转载自blog.csdn.net/qq_39441111/article/details/105084191
今日推荐