单值法:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# Prepare train data
train_X = np.linspace(0, np.pi, 100)
train_Y=np.sin(train_X)
# Define the model
X1 = tf.placeholder("float")
X2 = tf.placeholder("float")
X3 = tf.placeholder("float")
X4 = tf.placeholder("float")
Y = tf.placeholder("float")
w1 = tf.Variable(0.0, name="weight1")
w2 = tf.Variable(0.0, name="weight2")
w3 = tf.Variable(0.0, name="weight3")
w4 = tf.Variable(0.0, name="weight4")
b = tf.Variable(0.0, name="bias")
y1=w1*X1+(w2)*(X2)**3+w3*(X3)**5+(w4)*(X4)**7
loss = tf.reduce_mean(tf.square(Y - y1))
c1=[]
c2=[]
c3=[]
c4=[]
loss1=[]
#
#loss = tf.reduce_mean(tf.square(Y - w1*X1 -(w2)*(X2)**3-(w3)*(X3)**5))
optimizer =tf.train.AdamOptimizer()
train_op=optimizer.minimize(loss)
## Create session to run
with tf.Session() as sess:
init=tf.global_variables_initializer()
sess.run(init)
epoch = 1
for i in range(100):
for (x, y) in zip(train_X, train_Y):
_,ww1, ww2,ww3,ww4,loss_= sess.run([train_op, w1, w2,w3,w4,loss],feed_dict={X1:x,X2:x,X3:x,X4:x,Y: y})
print("Epoch: {}, w1: {}, w2: {},w3:{},loss:{}".format(epoch, ww1,ww2,ww3,loss_))
epoch += 1
c1=c1+[ww1]
c2=c2+[ww2]
c3=c3+[ww3]
c4=c4+[ww4]
loss1=loss1+[loss_]
plt.plot(train_X,train_Y,"+")
plt.plot(train_X,ww1*train_X+(ww2)*(train_X**3)+ww3*(train_X**5)+ww4*(train_X**7))
plt.show()
向量法:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# Prepare train data
train_X = np.linspace(0, np.pi, 100)
train_Y=np.sin(train_X)
# Define the model
X1 = tf.placeholder(tf.float32,shape=(100,))
X2 = tf.placeholder(tf.float32,shape=(100,))
X3 = tf.placeholder(tf.float32,shape=(100,))
X4 = tf.placeholder(tf.float32,shape=(100,))
Y = tf.placeholder(tf.float32,shape=(100,))
w1 = tf.Variable(0.0,name="weight1")
w2 = tf.Variable(0.0, name="weight2")
w3 = tf.Variable(0.0, name="weight3")
w4 = tf.Variable(0.0, name="weight4")
y1=w1*X1+w2*X2+w3*X3+w4*X4
loss = tf.reduce_mean(tf.square(Y - y1))
optimizer =tf.train.AdamOptimizer()
train_op=optimizer.minimize(loss)
## Create session to run
with tf.Session() as sess:
init=tf.global_variables_initializer()
sess.run(init)
epoch = 1
for i in range(10000):
_,ww1, ww2,ww3,ww4,loss_= sess.run([train_op, w1, w2,w3,w4,loss],feed_dict={X1:train_X,X2:train_X**3,X3:train_X**5,X4:train_X**7,Y: train_Y})
print("Epoch: {}, w1: {}, w2: {},w3:{},w4:{},loss:{}".format(epoch, ww1,ww2,ww3,ww4,loss_))
epoch += 1
plt.plot(train_X,train_Y,"+",label='data')
plt.plot(train_X,ww1*train_X+(ww2)*(train_X**3)+ww3*(train_X**5)+ww4*(train_X**7),label='curve')
plt.savefig('1.png',dpi=200)
plt.axis([0,np.pi,-2,2])
plt.legend(loc=1)
plt.show()