1 import tensorflow as tf 2 import numpy as np 3 4 """ 5 使用tensorflow 实现简单的 线性回归 y = np.dot(x, W) + b 6 """ 7 8 def f1(): 9 """ 10 先使用常量进行构建,展示大致的业务逻辑 11 :return: 12 """ 13 # 一、建图 14 with tf.Graph().as_default(): 15 # 1、创建模型输入 16 input_x = tf.constant( 17 value=[[1,2,3], 18 [2,3,4], 19 [12,34,23], 20 [2,3,9]], dtype=tf.float32, shape=[4, 3], name='input_x' 21 ) 22 # 2、创建变量 23 weights = tf.constant( 24 value=[[-5], 25 [3], 26 [2]], dtype=tf.float32, shape=[3, 1], name='weights' 27 ) 28 bias = tf.constant( 29 value=[2], dtype=tf.float32, shape=[1], name='bias' 30 ) 31 32 # 3、构建正向传播过程 33 y_hat = tf.matmul(input_x, weights) + bias 34 print(y_hat) 35 36 # 二、构建会话 37 with tf.Session() as sess: 38 # 执行模型图 39 y_hat_ = sess.run(y_hat) 40 print(y_hat_) 41 42 #将常量用variable换为变量 43 def f2(): 44 """ 45 变量使用 tf.Variable()来构建 46 :return: 47 """ 48 # 一、建图 49 with tf.Graph().as_default(): 50 # 1、创建模型输入 51 input_x = tf.constant( 52 value=[[1,2,3], 53 [2,3,4], 54 [12,34,23], 55 [2,3,9]], dtype=tf.float32, shape=[4, 3], name='input_x' 56 ) 57 """ 58 tf.Variable(self, 59 initial_value=None, # 给定初始化的值,可以是python的基本数据类型,也可以是tf的tensor对象 60 trainable=True, # bool 该变量是否参与模型训练。也就是该变量是否会执行梯度下降 61 collections=None, 62 validate_shape=True, 63 caching_device=None, 64 name=None, # tensorflow底层的名字。 65 variable_def=None, 66 dtype=None, # 数据类型 67 expected_shape=None, 68 import_scope=None, 69 constraint=None): 70 """ 71 # 2、创建变量 72 weights = tf.Variable( 73 initial_value=[[-5], 74 [3], 75 [2]], dtype=tf.float32, name='weights' 76 ) 77 print(weights) 78 bias_value = tf.constant( 79 value=[2], dtype=tf.float32, shape=[1], name='bias' 80 ) 81 bias = tf.Variable(initial_value=bias_value, dtype=tf.float32, name='bias') 82 83 # 3、构建正向传播过程 84 y_hat = tf.matmul(input_x, weights) + bias 85 print(y_hat) 86 87 # 二、构建会话 88 with tf.Session() as sess: 89 # fixme 执行变量初始化赋值 90 sess.run(tf.global_variables_initializer()) 91 # 执行模型图 92 y_hat_ = sess.run(y_hat) 93 print(y_hat_) 94 95 96 def f3(): 97 """ 98 占位符的使用 99 :return: 100 """ 101 # 一、建图 102 with tf.Graph().as_default(): 103 # 1、创建模型输入(占位符), 104 # todo 可以使用 shape=[None, 3], None使用类似于numpy。
#tf.placeholder与tf.placeholder_with_default均为占位符,不同的是后者可以设置默认的输入数据,调用时可以不传入数据。而前者无默认的数据,使用时必须传入数据
105 input_x = tf.placeholder(dtype=tf.float32, shape=[None, 3], name='input_x') 106 input_c = tf.placeholder_with_default( 107 input=1.0, shape=[], name='input_c' 108 ) 109 # 2、创建变量 110 weights = tf.Variable( 111 initial_value=[[-5], 112 [3], 113 [2]], dtype=tf.float32, name='weights' 114 ) 115 print(weights) 116 bias_value = tf.constant( 117 value=[2], dtype=tf.float32, shape=[1], name='bias' 118 ) 119 bias = tf.Variable(initial_value=bias_value, dtype=tf.float32, name='bias') 120 121 # 3、构建正向传播过程 122 y_hat = tf.matmul(input_x, weights) + bias 123 y_hat1 = y_hat + input_c 124 print(y_hat) 125 126 # 二、构建会话 127 with tf.Session() as sess: 128 # fixme 执行变量初始化赋值 129 sess.run(tf.global_variables_initializer()) 130 # 加载训练数据 131 data1 = [[1,2,3], 132 [2,3,4], 133 [12,34,23], 134 [2,3,9]] 135 # 执行模型图 136 y_hat_, y_hat1_ = sess.run( 137 fetches=[y_hat, y_hat1], feed_dict={input_x: data1})
#y_hat与y_hat1分别是那两种构建占位符的方式下的正向传播过程,feed_dict是传入data1数据,通过占位符input_x,传给y_hat或者y_hat1
138 print(y_hat_, y_hat1_) 139 140 data2 = [[1, 2, 3], 141 [2, 3, 4], 142 [2, 3, 9]] 143 y_hat_, y_hat1_ = sess.run( 144 fetches=[y_hat, y_hat1], feed_dict={input_x: data2, input_c: 10.0}) 145 print(y_hat_, y_hat1_) 146 147 148 if __name__ == '__main__': 149 f3()