首页 > 学院 > 开发设计 > 正文

【tensorflow学习笔记】(3)tensorflow中的概念

2019-11-08 00:44:20
字体:
来源:转载
供稿:网友

tensorflow分为构建模型和训练两部分,构建模型通常会用到Tensor,variable,placeholder,而训练阶段会用到session

构建模型阶段,构建一个图(graph)来描述我们的模型(数据输入->中间处理->输出),此时不会发生实际运算,而在模型构建完毕之后,会进入训练步骤,此时才会有实际的数据输入以及梯度计算等操作。

下面先一个实例来说明一下

import tesorflow as tfimport numpy as np# create datax_data = np.random.rand(100).astype(np.float32) # 随机生成100个数据y_data = x_data*0.1 + 0.3# create tensorflow struct startWeights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))  #生成一维向量biases = tf.Variable(tf.zeros([1]))y = Weights*x_data + biases#计算损失函数loss = tf.reduce_mean(tf.square(y - y_data))optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)init = tf.initialize_all_variable()# create tensorflow struct endwith tf.Session() as sess:    sess.run(init)    for step in range(201):        sess.run(train)        if step % 20 == 0:            PRint(step, sess.run(Weights), sess.run(biases))

控件Session:抽象模型的实现者

import tensorflow as tfmatrix1 = tf.constant([3, 3])  # 一行两列的矩阵matrix2 = tf.constant([[2],                       [2]])   # 两行一列的矩阵# method1sess = tf.Session()# 两个矩阵相乘result1 = tf.matmul(matrix1, matrix2)print(sess.run(result1))sess.close()# method2with tf.Session() as sess:    result2 = tf.matmul(matrix1, matrix2)    print(sess.run(result2))

session会话,抽象模型的实现者,代码多处会用到它,原因在于,模型是抽象的,只有实现了模型之后,才能够得到具体的值。同样的参数训练、预测,甚至变量的实际查询,都需要用到session。

Variable变量

import tensorflow as tfstate = tf.Variable(0, name=' counter')  # 计算器one = tf.constant(1)   # 常数为1# 执行new_value = state + onenew_value = tf.add(state, one)# 将new_value赋值给stateupdata = tf.assign(state, new_value)# 初始化所有变量init = tf.initialize_all_variable()with tf.Session() as sess:    sess.run(init)    # 循环3次    for i in range(3):        sess.run(updata)        # sess指针需要在state上run一下才可以得到结果        print(sess.run(state))

只要定义了Variable就一定会要用到tf.initialize_all_variables()来初始化所有的变量,即tf.Variable()与tf.initialize_all_varilables()组合使用的。

Variable需要在session之前初始化才可以在session中被使用。

变量一般是用来计算图中的需要计算的各个参数的,包含矩阵以及向量等。它是可以被读取和修改的,模型参数一般用Variable来表示。

传入值placeholder

import tensorflow as tfinput1 = tf.placeholder(tf.float32)input2 = tf.placeholder(tf.float32)# 两个数相乘output = tf.mul(input1, input2)with tf.Session() as sess:    print(sess.run(output, feed_dict={input1:[7.], input2:[2.]}))

只要用到tf.placeholder就会用到feed_dict字典,它们是绑定的,组合使用的。

添加层def

import tensoflow as tfdef add_layer(inputs, in_size, out_size, activetion_funtion=None):    Weights = tf.Variable(tf.random_normal([in_size, out_size]))  #矩阵一般习惯首字母大写    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)    Wx_plus_b = tf.matmul(inputs, Weights) + biases    if activetion_funtion is None:        outputs = Wx_plus_b    else:        outputs = activetion_funtion(Wx_plus_b)    return outputs

矩阵首字母大写,并非有这样的规定,只为了便于自己知晓。

推荐biases不为0。初始化值不为0比较好,所以选择随机。

activation_function=None代表线性函数


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表