tensorflow拟合曲线

单值法:

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()

效果图

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值