线性回归:
首先还是先贴上代码:
importtensorflowastfimportnumpyasnp#可以看做为样本#随机生成100个点x_data=np.random.rand(100) y_data=x_data*0.1+0.2#构造一个线性模型b=tf.Variable(1.) k=tf.Variable(0.) y=k*x_data+b#定义二次代价函数loss=tf.reduce_mean(tf.square(y_data-y)) #定义一个梯度下降法进行训练的优化器optimizer=tf.train.GradientDescentOptimizer(0.2) #定义最小化代价函数train=optimizer.minimize(loss) init=tf.global_variables_initializer() withtf.Session() assess: sess.run(init) forstepinrange(201): sess.run(train) ifstep%20==0: print(step,sess.run([k,b]))
代码分析:
这里就是简单定义了一个线性模型,作为已知的样本数据
importtensorflowastfimportnumpyasnp#可以看做为样本#随机生成100个点x_data=np.random.rand(100) y_data=x_data*0.1+0.2#构造一个线性模型b=tf.Variable(1.) k=tf.Variable(0.) y=k*x_data+b
然后自己构造一个根据数据特征构造模型:
#构造一个线性模型b=tf.Variable(1.) k=tf.Variable(0.) y=k*x_data+b
这里用到的优化器和二次函数在后面会给详细的讲解,这里就无脑用就行了
#定义二次代价函数 loss = tf.reduce_mean(tf.square(y_data-y)) #定义一个梯度下降法进行训练的优化器 optimizer = tf.train.GradientDescentOptimizer(0.2) #定义最小化代价函数 train = optimizer.minimize(loss) init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for step in range(201): sess.run(train) if step%20 ==0: print(step,sess.run([k,b]))
非线性回归:
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #使用numpy生成200个随机点 #生成范围[-0.5,0.5]的200个点,下面生成200行1列的数据 #但是之后要使用二维数据,因此增加一个维度 x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]#,np.newaxis相当于增加一个维度 :200*1 noise = np.random.normal(0,0.02,x_data.shape) y_data = np.square(x_data) + noise #定义两个placeholder #下面[]里面表示行不确定,列只有一列 x = tf.placeholder(tf.float32,[None,1])#None 表示任意行 与样本形状对应 #None的大小取决于传入的数据格式 y = tf.placeholder(tf.float32,[None,1]) #定义神经网络中间层 #输入层是x 输出层是y 中间层作为调整 #神经元定义为[1,10],是因为输入的神经元是1个,中间层的神经元定义了10个 #权重 Weight_L1 = tf.Variable(tf.random_normal([1,10])) #偏置值 biases_L1 = tf.Variable(tf.zeros([1,10])) #信号的总和 Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1 #L1作为中间层的输出,用双曲正切函数作用于信号的总和 L1 = tf.nn.tanh(Wx_plus_b_L1) #定义神经网络输出层 #用于连接输入和输出层 Weight_L2 = tf.Variable(tf.random_normal([10,1])) #输出层神经元只有一个,所以是[1,1] biases_L2 = tf.Variable(tf.zeros([1,1])) Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2 #通过接口函数得到预测值 prediction = tf.nn.tanh(Wx_plus_b_L2) #二次代价函数 loss = tf.reduce_mean(tf.square(y-prediction)) #使用梯度下降法训练 train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) with tf.Session() as sess: #变量初始化 sess.run(tf.global_variables_initializer()) for _ in range(2000): #进行训练 sess.run(train_step,feed_dict={x:x_data,y:y_data}) #获得预测值 prediction_value = sess.run(prediction, feed_dict={x:x_data}) #画图 plt.figure() plt.scatter(x_data,y_data) plt.plot(x_data,prediction_value,'r-',lw=5) plt.show()
演示训练结果: