ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

随机梯度下降SGD (Tensorflow 2.1)

2020-03-07 11:02:58  阅读:424  来源: 互联网

标签:loss name keras step tf Tensorflow 2.1 data SGD


import tensorflow as tf
import numpy as np

# name: create data
# function:
#   np.random.rand()
#       1.当函数括号内没有参数时,则返回一个浮点数;
#       2.当函数括号内有一个参数时,则返回秩为1的数组,不能表示向量和矩阵;
#       3.当函数括号内有两个及以上参数时,则返回对应维度的数组,能表示向量或矩阵;
#       4.通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1.
#   astype()
#       1.转化数据类型
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

# name: create tensorflow structure
# function:
#   tf.Variable()
#       1.tf.Variable(initializer,name),参数initializer是初始化参数,name是可自定义的变量名称
#   tf.random.uniform()
#       tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.dtypes.float32, seed=None, name=None)
#       shap是矩阵维数
#   tf.zeros()
#       tf.zeros(shape, dtype=tf.dtypes.float32, name=None)
Weights = tf.Variable(tf.random.uniform((1,), -1.0, 1.0))
biases = tf.Variable(tf.zeros((1,)))

#name: loss function
#function:
#   tf.keras.losses.MSE()
#       tf.keras.losses.MSE(y_true, y_pred)
#       y_true真实值, y_pred预测值
#   tf.keras.optimizers.SGD() 随机梯度下降
#       tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.0, nesterov=False, name='SGD', **kwargs)
def loss():
    return tf.keras.losses.MSE(y_data, Weights * x_data + biases)
optimizer = tf.keras.optimizers.SGD(learning_rate=0.5)

# minimize()
#其中minimize()包含两个步骤:
#   1.计算loss对指定val_list的梯度(导数),返回元组列表[(gradient,variable),…]
#   compute_gradients(loss,val_list)
#   注:tf.gradients(loss, tf.variables)与compute_gradients(loss,val_list)作用类似,但是只返回梯度
#   2.用计算得到的梯度来更新对应的变量(权重)
#   optimizer.apply_gradients(grads_and_vars, global_step=global_step, name=None)将
#   compute_gradients(loss,val_list)的返回值作为输入对variable更新
#所以一下写法可能隐藏梯度爆炸和梯度消失
#参考链接https://blog.csdn.net/sinat_37386947/article/details/88849519
for step in range(201):
    optimizer.minimize(loss, var_list=[Weights, biases])
    if step % 20 == 0:
        print("{} step, weights = {}, biases = {}".format(step, Weights.read_value(), biases.read_value()))  # read_value函数可用numpy替换

 

标签:loss,name,keras,step,tf,Tensorflow,2.1,data,SGD
来源: https://www.cnblogs.com/lalalatianlalu/p/12433043.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有