在 Python 中进行梯度下降的一种方法是自己编写代码。然而,考虑到它在机器学习中的流行程度,我想知道是否有一个可以导入的 Python 库可以为我提供梯度下降方法(最好是小批量梯度下降,因为它通常比批量和随机梯度下降更好) ,但如果我错了,请纠正我)。
我检查了 NumPy 和 SciPy 但找不到任何东西。我没有使用 TensorFlow 的经验,但浏览过他们的在线 API。我找到了 tf.train.GradientDescentOptimizer,但没有参数可以让我选择批量大小,所以我对它的实际含义相当模糊。
抱歉,如果我听起来很天真。我正在自学很多这样的东西。
我最近切换到 Tensorflow Eager(目前使用 TF 1.8.0)并且非常喜欢它。但是,我现在有一个相当大的模型,当使用计算 TF 中的梯度所需的渐变磁带运行时,该模型不适合我的 GPU 内存(GTX 1080Ti、12GB VRAM)。前向传递(即不使用渐变带)效果很好。
我考虑过使用OpenAI 的梯度检查点,希望这会有所帮助。然而,简单地按照 Git 中的描述使用它似乎对 Eager Execution 没有帮助,即
import tensorflow as tf
import tensorflow.contrib.eager as tfe
import memory_saving_gradients
tf.__dict__["gradients"] = memory_saving_gradients.gradients_memory
# using gradients_memory or gradients_speed does not change anything
# tf.__dict__["gradients"] = memory_saving_gradients.gradients_speed
[...]
with tfe.GradientTape() as g:
output = run_large_model()
loss = calculate_loss_on_output(output)
grads = g.gradient(full, model.variables)
optimizer.apply_gradients(zip(grads, model.variables))
Run Code Online (Sandbox Code Playgroud)
内存不足,与是否使用梯度检查点无关。
我的猜测是,梯度磁带仍然存储所有变量以及向后传递所需的信息,并且梯度检查点没有效果,因为 Eager 模式下的 TF 实际上并没有构建图形(据我所知 - 或者至少它是不同的)图形)。
您是否有任何经验或想法如何解决这个问题,或者我需要做什么才能在 TF Eager 模式下使用梯度检查点?
我正在学习 Coursera 的机器学习课程。有一个主题叫梯度下降来优化成本函数。它表示同时更新 theta0 和 theta1,从而最小化成本函数并达到全局最小值。
梯度下降的公式为
我如何使用 python 以编程方式执行此操作?我正在使用 numpy 数组和 pandas 从头开始逐步理解其逻辑。
现在我只计算了成本函数
# step 1 - collect our data
data = pd.read_csv("datasets.txt", header=None)
def compute_cost_function(x, y, theta):
'''
Taking in a numpy array x, y, theta and generate the cost function
'''
m = len(y)
# formula for prediction = theta0 + theta1.x
predictions = x.dot(theta)
# formula for square error = ((theta1.x + theta0) - y)**2
square_error = (predictions - y)**2
# sum of square error …Run Code Online (Sandbox Code Playgroud) python numpy machine-learning linear-regression gradient-descent
我正在尝试开发用于将方程转换为代码的通用启发式算法.这个特殊的问题解决了如何在Matlab中实现带求和函数的方程.
使用sum()与矩阵乘法的示例:
我实现了这个等式,并认为我需要使用sum()函数:

J = 1/(2*m) * sum( (X*theta - y).^2 );
Run Code Online (Sandbox Code Playgroud)
然后我实现了这个类似的等式,而不需要使用sum()函数!

theta = theta - (alpha/m) * ((X*theta - y)'*X)';
Run Code Online (Sandbox Code Playgroud)
哪里:
X: 100x2 (training input plus a 'ones' vector)
y: 100x1 (training output)
theta: 2x1 (parameters)
m: 100 (length of y)
alpha: 0.01 (learning rate)
Run Code Online (Sandbox Code Playgroud)
当Matlab的矩阵乘法"处理"求和时,有哪些原理?
谢谢!
你能解释下面的话,它真的让我很困惑.1.iterations 2.gradient descent steps 3.epoch 4.batch size.
我正在使用caffe在我自己的数据上训练AlexNet.我看到的一个问题是"训练净输出"损失和"迭代损失"在训练过程中几乎相同.而且,这种损失有波动.喜欢:
Run Code Online (Sandbox Code Playgroud)... ...Iteration 900, loss 0.649719 ... Train net output #0: loss = 0.649719 (* 1 = 0.649719 loss ) ... Iteration 900, lr = 0.001 ...Iteration 1000, loss 0.892498 ... Train net output #0: loss = 0.892498 (* 1 = 0.892498 loss ) ... Iteration 1000, lr = 0.001 ...Iteration 1100, loss 0.550938 ... Train net output #0: loss = 0.550944 (* 1 = 0.550944 loss ) ... Iteration 1100, lr = 0.001 ...
machine-learning neural-network gradient-descent deep-learning caffe
我设计了一个MLP,完全连接,有2个隐藏和一个输出层.如果我使用批量或小批量梯度下降,我会得到一个很好的学习曲线.
我弄错了什么?
根据我的理解,我使用Tensorflow进行随机梯度下降,如果我只提供一列火车/学习每个火车步骤的例子,例如:
X = tf.placeholder("float", [None, amountInput],name="Input")
Y = tf.placeholder("float", [None, amountOutput],name="TeachingInput")
...
m, i = sess.run([merged, train_op], feed_dict={X:[input],Y:[label]})
Run Code Online (Sandbox Code Playgroud)
因此输入是10分量矢量,标签是20分量矢量.
对于测试,我运行1000次迭代,每次迭代包含50个准备好的训练/学习示例中的一个.我期待一个overfittet nn.但正如你所见,它没有学习:(
由于nn将在在线学习环境中执行,因此不能选择小批量或批量梯度下降.
谢谢你的任何提示.
我用两个RELU隐藏层+线性激活层创建了ANN,并试图逼近简单的ln(x)函数.我不能做到这一点.我很困惑,因为x:[0.0-1.0]范围内的lx(x)应该没有问题地近似(我使用学习率0.01和基本梯度下降优化).
import tensorflow as tf
import numpy as np
def GetTargetResult(x):
curY = np.log(x)
return curY
# Create model
def multilayer_perceptron(x, weights, biases):
# Hidden layer with RELU activation
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_1 = tf.nn.relu(layer_1)
# # Hidden layer with RELU activation
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
layer_2 = tf.nn.relu(layer_2)
# Output layer with linear activation
out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
return out_layer
# Parameters
learning_rate = 0.01
training_epochs = 10000
batch_size = 50
display_step = 500 …Run Code Online (Sandbox Code Playgroud) regression neural-network gradient-descent deep-learning tensorflow
我用caffe来深入学习.要为caffe创建一个新图层,我需要
(1)将图层添加到proto/caffe.proto以更新下一个可用ID
(2)通过将图层添加到layer_factory.cpp来创建图层
我的查询是caffe.proto中新目的的用途和layer_factory.cpp中createable的功能.
在layer_factory.cpp中有一些不包含为创建的图层.包含和不包含在layer_factory.cpp中的这些层之间有什么区别.
machine-learning neural-network gradient-descent deep-learning caffe
我对pytorch的向后功能有些疑问,我认为我没有得到正确的输出
import numpy as np
import torch
from torch.autograd import Variable
a = Variable(torch.FloatTensor([[1,2,3],[4,5,6]]), requires_grad=True)
out = a * a
out.backward(a)
print(a.grad)
Run Code Online (Sandbox Code Playgroud)
输出是
tensor([[ 2., 8., 18.],
[32., 50., 72.]])
Run Code Online (Sandbox Code Playgroud)
也许是 2*a*a
但我认为输出应该是
tensor([[ 2., 4., 6.],
[8., 10., 12.]])
Run Code Online (Sandbox Code Playgroud)
2*a. 原因 d(x^2)/dx=2x
gradient-descent ×10
tensorflow ×4
python ×3
caffe ×2
autograd ×1
import ×1
matlab ×1
matrix ×1
mini-batch ×1
numpy ×1
pytorch ×1
regression ×1