当前位置:网站首页>Tensorflow customize the whole training process
Tensorflow customize the whole training process
2022-07-06 01:35:00 【@zhou】
Create a machine learning problem
f ( x ) = 3 x + 7 f(x) = 3x + 7 f(x)=3x+7
For a machine learning problem , There are the following steps :
- Get training data .
- Defining models .
- Define the loss function .
- Traverse the training data , Calculate the loss from the target value .
- Calculate the gradient of this loss , And use optimizer Adjust variables to fit data .
- The result of the calculation is .
Build data
Supervised learning uses input ( Usually expressed as x) And the output ( Expressed as y, Commonly known as labels ). The goal is to learn from paired inputs and outputs , So that you can predict the output value according to the input .TensorFlow Almost every input data in is represented by tensor , And it's usually a vector . In supervised learning , Output ( That is, think of the predicted value ) It's also a tensor . This is done by putting Gauss ( Normal distribution ) Some data synthesized by adding noise to the points on the line , And visualize these data .
x = np.random.random([1000]) * 5
noise = np.random.random([1000])
y = 3 * x + 7
import matplotlib.pyplot as plt
plt.scatter(x, y, c="b")
plt.show()
Customize the model we need
We inherit tf.module class , And define two variables , Its attribute is trainable_variables.
class selfmodel(tf.Module):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.v1 = tf.Variable(1.0, trainable=True)
self.v2 = tf.Variable(2.0, trainable=True)
def __call__(self, x):
y = self.v1 * x + self.v2
return y
Define the loss function
We use the mean square deviation here to calculate the loss
def loss(target_y, predicted_y):
return tf.reduce_mean(tf.square(target_y - predicted_y))
Define the cycle training function
We use epcohs Function to get the two variables we need v 1 , v 2 v1,v2 v1,v2, After each training v 1 , v 2 v1, v2 v1,v2 Record , Finally, visualization
def train(model, x, y,epochs,optimizer):
v1, v2 = [], []
for j in range(epochs):
with tf.GradientTape() as gd:
y_pred = model(x) # This needs to be inside
loss_score = loss(y, y_pred)
grad = gd.gradient(loss_score, model.trainable_variables)
optimizer.apply_gradients(zip(grad, model.trainable_variables))
v1.append(model.v1.numpy())
v2.append(model.v2.numpy())
return (model, v1, v2)
The end result shows
I'm defining epcohs When , If the setting is too small , Will lead to v 1 , v 2 v1,v2 v1,v2 Can't get the right result
opt = tf.keras.optimizers.SGD()
model = selfmodel()
epochs = 1000
(model, v1, v2) = train(model, x, y,epochs, opt)
# draw
plt.plot(range(epochs), v1, "r",
range(epochs), v2, "b")
plt.plot([3] * epochs, "r--",
[7] * epochs, "b--")
plt.legend(["W", "b", "True W", "True b"])
plt.show()
Problems in the code
# The code in this case will report an error , Say our grad The result is (none, none),
# because y_pred = model(x) It should be written in with Inside
# The following will write the correct way , The reason for this error is loss Function in
# Yes molel.trainable_variables When seeking derivative , Gradient not found
y_pred = model(x)
with tf.GradientTape() as t:
l = loss(y, y_pred)
grad = t.gradient(l, model.trainable_variables)
optimizer = tf.keras.optimizers.SGD()
optimizer.apply_gradients(zip(grad, model.trainable_variables))
# Correct writing
with tf.GradientTape() as t:
y_pred = model(x)
l = loss(y, model(x))
grad = t.gradient(l, model.trainable_variables)
print(model.trainable_variables)
optimizer = tf.keras.optimizers.SGD()
optimizer.apply_gradients(zip(grad, model.trainable_variables))
边栏推荐
- 竞价推广流程
- Cadre du Paddle: aperçu du paddlelnp [bibliothèque de développement pour le traitement du langage naturel des rames volantes]
- WGet: command line download tool
- [network attack and defense training exercises]
- Hcip---ipv6 experiment
- Paddle框架:PaddleNLP概述【飞桨自然语言处理开发库】
- Leetcode sword finger offer 59 - ii Maximum value of queue
- Basic operations of databases and tables ----- default constraints
- Unity | 实现面部驱动的两种方式
- 伦敦银走势中的假突破
猜你喜欢
MATLB | real time opportunity constrained decision making and its application in power system
Accelerating spark data access with alluxio in kubernetes
Cookie concept, basic use, principle, details and Chinese transmission
[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
Electrical data | IEEE118 (including wind and solar energy)
3D模型格式汇总
Docker compose配置MySQL并实现远程连接
Maya hollowed out modeling
National intangible cultural heritage inheritor HD Wang's shadow digital collection of "Four Beauties" made an amazing debut!
Redis-列表
随机推荐
[technology development -28]: overview of information and communication network, new technology forms, high-quality development of information and communication industry
[flask] static file and template rendering
How to see the K-line chart of gold price trend?
[ssrf-01] principle and utilization examples of server-side Request Forgery vulnerability
竞赛题 2022-6-26
记一个 @nestjs/typeorm^8.1.4 版本不能获取.env选项问题
Opinions on softmax function
Electrical data | IEEE118 (including wind and solar energy)
Cookie concept, basic use, principle, details and Chinese transmission
Kotlin basics 1
General operation method of spot Silver
01.Go语言介绍
【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
Alibaba-Canal使用详解(排坑版)_MySQL与ES数据同步
A Cooperative Approach to Particle Swarm Optimization
yii中console方法调用,yii console定时任务
Alibaba canal usage details (pit draining version)_ MySQL and ES data synchronization
Redis-字符串类型
3D model format summary
Nmap: network detection tool and security / port scanner