import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#随机生成数据 后续这部分就是说数据清洗,载入,预处理的部分了,总之是tensorflow可以处理的数据
x_data = np.linspace(0.5,0.8,200)[:,np.newaxis]
b = np.random.normal(0.,0.02,x_data.shape)
y_data = np.square(x_data) + b
# plt.figure()
# plt.scatter(x_data,y_data)
# plt.show()
#定义tensorflow的输入
x = tf.placeholder(tf.float32,[None,1])
y = tf.placeholder(tf.float32,[None,1])
#定义中间层
w_1 = tf.Variable(tf.random_normal([1,10]))
b_1 = tf.Variable(tf.zeros([1,10]))
L1 = tf.nn.tanh(tf.add(tf.matmul(x,w_1),b_1))
#定义输出层
w_2 = tf.Variable(tf.random_normal([10,1]))
b_2 = tf.Variable(tf.zeros([1,1]))
L2 = tf.nn.tanh(tf.add(tf.matmul(L1,w_2),b_2))
#定义损失函数
loss = tf.reduce_mean(tf.square(y - L2))
#定义优化函数
train = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for step in range(10000):
sess.run(train,feed_dict={x:x_data,y:y_data})
if step % 200 == 0:
print(step)
# sess.run(L2, feed_dict={x: x_data}) 既然用了feed_dict的模式在每次run的时候不要忘记加上feed_dict
# 而且不要把这一句再到 每多少次打印的if块内,因为不会起作用,它依然会每feed一次数据打印一次
tensorflow
里对于暂时不进行赋值的元素有一个称呼叫占位符,a = tf.placeholder(tf.float32) 表示给a赋予一个32位浮点数。具体多少,不知道,等到需要赋值的时候才知道 feed_dict
就是用来赋值的,格式为字典型。比如,对上一章节中的a
进行赋值。有feed_dict={a:8}
。
import tensorflow as tf
#设置两个乘数,用占位符表示
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
#设置乘积output = tf.multiply(input1, input2)
with tf.Session() as sess:
#用feed_dict以字典的方式填充占位
print(sess.run(output, feed_dict={input1:[8.],input2:[2.]}))
结果是:
[ 16.]
tensorflow还提供字典填充函数,使输入和输出更为简单:feed_dict = {}。例如:需要吧8和2填充到字典中,就需要占位符tensorflow.placeholder()而非变量,input1
= tf.placeholder(tf.float32),因为是一个元素不需要矩阵相乘,只要简单的乘法即可:tensorflow.multiply()