import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # add one threshold threshold=1.0e-2 x1_data=np.random.rand(100) x2_data=np.random.rand(100) y_data=x1_data*2+x2_data*3+1.5
weight1=tf.Variable(1.) weight2=tf.Variable(1.) bias=tf.Variable(1.) x1_=tf.placeholder(tf.float32) x2_=tf.placeholder(tf.float32) y_=tf.placeholder(tf.float32) #y_model=weight*x_+bias #y_model=tf.add(tf.multiply(x_,weight),bias) y_model=tf.add(tf.add(tf.multiply(x1_,weight1),tf.multiply(x2_,weight2)),bias) #loss = tf.pow((y_model-y_),2) loss=tf.reduce_mean(tf.pow((y_model-y_),2)) train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
sess=tf.Session() init=tf.initialize_all_variables() sess.run(init) flag=1 while(flag): for (x,y) in zip(zip(x1_data,x2_data),y_data): sess.run(train_op,feed_dict={x1_:x[0],x2_:x[1],y_:y}) print("weight:", weight1.eval(sess),"weight:", weight2.eval(sess),"bias: ",bias.eval(sess)) if sess.run(loss,feed_dict={x1_:x[0],x2_:x[1],y_:y})<=threshold: flag=0 fig=plt.figure() ax=Axes3D(fig) X,Y=np.meshgrid(x1_data,x2_data) Z=sess.run(weight1)*X+sess.run(weight2)*Y+sess.run(bias) ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow')) ax.contourf(X,Y,Z,zdir='z',offset=-1,cmap='rainbow') ax.set_zlim(-3,2) plt.show()
|