使用tensorflow2.0.0a0 api實(shí)現(xiàn)線(xiàn)性回歸算法

如標(biāo)題,tf2相較tf1.x在api上有比較大的變動(dòng),1.x的很多api都在2.0中移除。
本文使用tf2.0的api實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線(xiàn)性回歸算法。

import tensorflow as tf

print(tf.__version__)

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(199346745)

# 產(chǎn)生測(cè)試數(shù)據(jù)
w_known = [1.4, 0.4, -0.4, .3, -1.9]
DIM = len(w_known)
N = 1000
BATCH = 300

x = np.random.random((N, DIM))
# default DIM=5
y_ = sum(w_known[i]*x[:,i] for i in range(len(w_known)))
err = 0.01*np.random.normal(size=N)
y = (y_ + err).reshape((N, 1))

# 查看測(cè)試數(shù)據(jù)分布
plt.hist(err, 30)
plt.show()

plt.hist(y.reshape(1000), 30)
plt.show()

# 得益于tf2.0的動(dòng)態(tài)圖特性,可以在函數(shù)中直接循環(huán)訓(xùn)練
def lr(x, y, BATCH=None, niter=1000):
    if BATCH is None:
        BATCH = N
    losses = []
    w = tf.Variable(tf.random.normal(shape=(DIM, 1), mean=0))
    for i in range(niter):
        randidx = np.random.choice(N, size=BATCH)
        x2, y2 = (tf.constant(x[randidx], dtype='float32'),
                  tf.constant(y[randidx], dtype='float32'))
        loss = lambda: tf.losses.MeanSquaredError()(tf.matmul(x2, w), y2)
        opt = tf.keras.optimizers.SGD(1e-1)
        opt.minimize(loss, var_list=[w])
        losses.append(loss().numpy())
    return w, losses

w, losses = lr(x, y, 300)

# 查看loss的變化
plt.plot(losses)
plt.show()

# 查看w和設(shè)定的w的距離
tf.losses.MeanSquaredError()(w, tf.reshape(tf.constant(w_known),(5,1)))


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容