初次尝试TensorFlow
import tensorflow as tf
import numpy as np
#create data
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1+0.3
#随机生成weight,biases为0
Weight = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))
#设置假设函数,loss函数,优化器,以及init初始化
y = Weight*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_variables()
#激活初始化
sess = tf.Session()
sess.run(init)
#for循环训练
for step in range(201):
sess.run(train)
if step%20==0:
print(step,sess.run(Weight),sess.run(biases))
矩阵相乘以及输出
import tensorflow as tf
import numpy as np
maxtrix1 = tf.constant([[3,3]])
maxtrix2 = tf.constant([[2],[2]])
#maxtrix multipy np.dot(maxtrix1,maxtrix2)
# 这两行一样的这行是numpy的矩阵相乘,下面是TensorFlow的矩阵相乘
product = tf.matmul(maxtrix2,maxtrix1)
#方法一
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()
#方法二,不用close
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)
定义变量,相加,更新
import tensorflow as tf
import numpy as np
state = tf.Variable(0,name="counter")
#print(state.name)
one = tf.constant(1)
new_value = tf.add(state,one)
update = tf.assign(state,new_value)
#一定要有这个init,如果定义了一个变量
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
for _ in range(3):
sess.run(update)
print(sess.run(state))
placeholder
意思是运行的时候再给placeholder赋值,在sess.run时确定placeholder的值
它有几个参数,第一个参数是你要保存的数据的数据类型,大多数是tensorflow中的float32数据类型,后面的参数就是要保存数据的结构,比如要保存一个1×2的矩阵,则struct=[1 2]。
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
数据初始化
init = tf.initialize_all_variables()
建造神经网络
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def add_layer(input,in_size,out_size,activation_function=None):
weight = tf.Variable(tf.random_normal([in_size,out_size]))
biases = tf.Variable(tf.zeros([1,out_size])+0.1)
Wx_plus_b = tf.matmul(input,weight)+biases
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
#设置输入数据,加noise
x_data = np.linspace(-1,1,300)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data)-0.5+noise
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])
#设置hidden layer和output layer
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
prediction = add_layer(l1,10,1,activation_function=None)
#设置loss函数,使用gd优化
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#激活初始化
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
#绘制散点图,连续变化
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data,y_data,s=10)
plt.ion()
plt.show()
#开始训练
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i%50==0:
print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
try:
ax.lines.remove(lines[0])
except Exception:
pass
prediction_value = sess.run(prediction,feed_dict={xs:x_data})
#绘制预测曲线
lines = ax.plot(x_data,prediction_value,"r-",lw=5)
plt.pause(0.1)
tensorboard神经网络可视化工具
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def add_layer(input,in_size,out_size,activation_function=None):
with tf.name_scope('layer'):
with tf.name_scope('Weight'):
weight = tf.Variable(tf.random_normal([in_size,out_size]),name='W')
with tf.name_scope('Biases'):
biases = tf.Variable(tf.zeros([1,out_size])+0.1,name='B')
with tf.name_scope('Wx_plus_b'):
Wx_plus_b = tf.add(tf.matmul(input,weight),biases)
if activation_function is None:
output = Wx_plus_b
else:
output = activation_function(Wx_plus_b)
return output
x_data = np.linspace(-1,1,300)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data)-0.5+noise
with tf.name_scope('inputs'):
xs = tf.placeholder(tf.float32,[None,1],name='x_input')
ys = tf.placeholder(tf.float32,[None,1],name='y_input')
h1 = add_layer(xs,1,10,activation_function = tf.nn.relu)
prediction = add_layer(h1,10,1,activation_function=None)
with tf.name_scope('loss'):
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
with tf.name_scope('train'):
train_step = tf.train.GradientDescentOptimizer(0.