tensorflow2實現線性回歸例子

2022-04-06 06:14:24 字數 2486 閱讀 7534

%tensorflow_version 2.x

import

tensorflow as tf

from tensorflow import

keras

from tensorflow.keras import

layers

from tensorflow import

initializers as init

from tensorflow import

losses

from tensorflow.keras import

optimizers

from tensorflow import

data as tfdata

#1.生成資料

num_inputs = 2#

資料有兩個特徵

num_examples = 1000#

共有1000條資料

true_w = [2, -3.4]#

兩個特徵的權重

true_b = 4.2#

偏置features = tf.random.normal(shape=(num_examples, num_inputs), stddev=1)#

隨機生成乙個1000*2的矩陣,每行代表一條資料

labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b#

計算y值

labels += tf.random.normal(labels.shape, stddev=0.01)#

加上乙個偏差

#2.組合資料

batch_size = 10

#將訓練資料的特徵和標籤組合

dataset = tfdata.dataset.from_tensor_slices((features, labels))#

按第0維進行切分,和標籤組合

#隨機讀取小批量

dataset = dataset.shuffle(buffer_size=num_examples)#

隨機打亂1000

dataset =dataset.batch(batch_size)

data_iter = iter(dataset)#

生成乙個迭代器

輸出乙個batch看一下:

這裡是其中乙個batch,它包含10條原資料。

model = keras.sequential()#

定義模型

model.add(layers.dense(1, kernel_initializer=init.randomnormal(stddev=0.01)))#

定義網路層

loss = losses.meansquarederror()#

定義損失

trainer = optimizers.sgd(learning_rate=0.03)#

定義優化器為隨機梯度下降

loss_history =

num_epochs = 3

for epoch in range(1, num_epochs + 1):#

全體資料迴圈三次

for (batch, (x, y)) in enumerate(dataset):#

對每乙個batch迴圈

with tf.gradienttape() as tape:#

定義梯度

l = loss(model(x, training=true), y)

#記錄該batch的損失

grads = tape.gradient(l, model.trainable_variables)#

tape.gradient找到變數的梯度

更新權重

l = loss(model(features), labels)#

遍歷完一次全體資料後的損失

print('

epoch %d, loss: %f

' % (epoch, l))

因為我們要求迴圈所有資料3次,而每一次迴圈都是小批量迴圈,每個小批量裡都有10條資料,所以首先寫出兩個for迴圈,最裡層的迴圈是每次迴圈10條資料。

我們通過呼叫tensorflow.gradienttape記錄動態圖梯度,之前定義的損失函式是均方誤差,需要真實值和模型值,於是把model(x)和y輸入loss裡。

我們可以記錄每個batch的損失,新增到loss_history中。

檢視訓練出來的引數和原引數的對比:

基於tensorflow2實現卷積神經網路

利用tensorflow2中的api實現乙個簡單的卷積神經網路,完成梯度下降的操作並繪製訓練集和測試集準確率曲線。資料集在這裡 資料分布 訓練集數量為209,測試集數量為50 import numpy as np import matplotlib.pyplot as plt import tens...

tensorflow2實現yolov3過程

本篇文章為閱讀 源 後整理的筆記。部分變數我還是理解的不到位 如下面打問號的地方 希望有大神能多多指教!配置引數準備 train input size 大小 416 strides 跨度 取值 8,16,32 類別 80個類別 batch size 4 train output sizes 計算方法...

tensorflow2的資料載入

對於一些小型常用的資料集,tensorflow有相關的api可以呼叫 keras.datasets 經典資料集 1 boston housing 波士頓房價 2 mnist fasion mnist 手寫數字集 時髦品集 3 cifar10 100 物象分類 4 imdb 電影評價 使用 tf.da...