2024-04-20 09:24:48 发布
网友
例如,对于一个简单的线性模型y=wx+b,其中x和y分别是输入和输出,w和b是训练参数,我想知道,在每个时代,我如何首先更新b,然后更新w
y=wx+b
x
y
w
b
不太可能。TF的backprop基于向前prop时其他变量的值计算所有变量的梯度。如果你想在训练w和b之间交替,你将解冻w和冻结b(设置为trainable=False)、前进道具和后退道具,然后冻结w和解冻b,以及前进道具和后退道具。我不认为这会运行得很快,因为TF并不是真正设计为在每个小批量上切换可训练标志
Tensorflow可能不是最好的工具。您只需使用python就可以做到这一点
如果需要使用更复杂的函数进行回归scikit-learn可能是更合适的库
无论使用哪种工具,都可以执行Batch Gradient Descent or Stochastic Gradient Descent
但是首先你需要定义一个“成本函数”,这个函数基本上告诉你离真实值有多远,例如最小均方误差(LMS),这类函数从你的模型和真实值中获取预测值,并对训练参数进行调整
这是BGD或SGD在培训过程中优化的功能
这是一个我用来理解正在发生的事情的例子,它不是最佳解决方案,但它会让你了解正在发生的事情
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns tips = sns.load_dataset("tips") alpha = 0.00005 thetas = np.array([1.,1.]) def h(thetas, x): #print(f'theta 0: {thetas[0]}') #print(f'theta 1: {thetas[1]}') #print(f'h=m:{thetas[0] + (thetas[1]*x[1])}') return thetas[0] + (thetas[1]*x[1]) for i in zip(tips.total_bill, tips.tip): x = np.array([1, i[0]]) y = i[1] for index, theta in enumerate(thetas): #print(f'theta in: {thetas[index]}') #print(f'error: {thetas[index] + alpha*(y - h(thetas, x))*x[index]}') thetas[index] = thetas[index] + alpha*(y - h(thetas, x))*x[index] #print(f'theta out: {thetas[index]}') #print(thetas) print(thetas) xplot = np.linspace(min(tips.total_bill), max(tips.total_bill), 100, endpoint=True) xp = [[1,x] for x in xplot] yp = [h(thetas, xi) for xi in xp] plt.scatter(tips.total_bill,tips.tip) plt.plot(xplot, yp, 'o', color= 'orange') plt.show()
不太可能。TF的backprop基于向前prop时其他变量的值计算所有变量的梯度。如果你想在训练w和b之间交替,你将解冻w和冻结b(设置为trainable=False)、前进道具和后退道具,然后冻结w和解冻b,以及前进道具和后退道具。我不认为这会运行得很快,因为TF并不是真正设计为在每个小批量上切换可训练标志
Tensorflow可能不是最好的工具。您只需使用python就可以做到这一点
如果需要使用更复杂的函数进行回归scikit-learn可能是更合适的库
无论使用哪种工具,都可以执行Batch Gradient Descent or Stochastic Gradient Descent
但是首先你需要定义一个“成本函数”,这个函数基本上告诉你离真实值有多远,例如最小均方误差(LMS),这类函数从你的模型和真实值中获取预测值,并对训练参数进行调整
这是BGD或SGD在培训过程中优化的功能
这是一个我用来理解正在发生的事情的例子,它不是最佳解决方案,但它会让你了解正在发生的事情
相关问题 更多 >
编程相关推荐