我的问题是最后。
一个使用小批量 GD 训练并使用最后一个全连接层(第 60 行)中的 dropout的示例CNN
fc1 = tf.layers.dropout(fc1, rate=dropout, training=is_training)
Run Code Online (Sandbox Code Playgroud)
起初我认为tf.layers.dropoutortf.nn.dropout随机将列中的神经元设置为零。但我最近发现并非如此。下面的一段代码打印了它的dropout作用。我将fc0用作 4 个样本 x 10 的特征矩阵,并将fc用作退出版本。
import tensorflow as tf
import numpy as np
fc0 = tf.random_normal([4, 10])
fc = tf.nn.dropout(fc0, 0.5)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
a, b = sess.run([fc0, fc])
np.savetxt("oo.txt", np.vstack((a, b)), fmt="%.2f", delimiter=",")
Run Code Online (Sandbox Code Playgroud)
在输出中oo.txt(原始矩阵:第 1-4 行,删除矩阵:第 5-8 行):
0.10,1.69,0.36,-0.53,0.89,0.71,-0.84,0.24,-0.72,-0.44
0.88,0.32,0.58,-0.18,1.57,0.04,0.58,-0.56,-0.66,0.59
-1.65,-1.68,-0.26,-0.09,-1.35,-0.21,1.78,-1.69,-0.47,1.26
-1.52,0.52,-0.99,0.35,0.90,1.17,-0.92,-0.68,-0.27,0.68
0.20,0.00,0.71,-0.00,0.00,0.00,-0.00,0.47,-0.00,-0.87
0.00,0.00,0.00,-0.00,3.15,0.07,1.16,-0.00,-1.32,0.00
-0.00,-3.36,-0.00,-0.17,-0.00,-0.42,3.57,-3.37,-0.00,2.53
-0.00,1.05,-1.99,0.00,1.80,0.00,-0.00,-0.00,-0.55,1.35
Run Code Online (Sandbox Code Playgroud)
我的理解正确吗?dropout 是在小批量 …
machine-learning neural-network gradient-descent tensorflow mini-batch
我目前正在 python 中实现向量化梯度下降。但是,我仍然收到溢出错误。不过,我的数据集中的数字并不是很大。我正在使用这个公式:
我选择此实现是为了避免使用衍生工具。有人对如何解决这个问题有任何建议还是我实施错误?先感谢您!
数据集链接:https://www.kaggle.com/CooperUnion/anime-recommendations-database/data
## Cleaning Data ##
import math
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
data = pd.read_csv('anime.csv')
# print(data.corr())
# print(data['members'].isnull().values.any()) # Prints False
# print(data['rating'].isnull().values.any()) # Prints True
members = [] # Corresponding fan club size for row
ratings = [] # Corresponding rating for row
for row in data.iterrows():
if not math.isnan(row[1]['rating']): # Checks for Null ratings
members.append(row[1]['members'])
ratings.append(row[1]['rating'])
plt.plot(members, ratings)
plt.savefig('scatterplot.png')
theta0 = 0.3 # Random …Run Code Online (Sandbox Code Playgroud) python artificial-intelligence machine-learning gradient-descent loss-function
我正在研究用于 CNN 的模糊卷积滤波器。我已经准备好了函数 - 它接受 2D 输入矩阵和 2D 核/权重矩阵。该函数输出卷积特征或激活图。
现在,我想使用 Keras 构建 CNN 的其余部分,这些 CNN 也将具有标准的 2D 卷积滤波器。
有什么方法可以将我的自定义过滤器插入到 Keras 模型中,使内核矩阵由 Keras 后端的内置库更新?或者,是否有任何库可用于在每次迭代时更新内核?
python backpropagation gradient-descent conv-neural-network keras
我可以从这个视频中看到下面这段代码试图做什么。但是sumfromy=torch.sum(x**2)让我感到困惑。通过sum操作,y变成一个只有一个值的张量。正如我所理解的.backward()计算导数,为什么我们要使用sum并减少y到一个值?
import pytorch
import matplotlib.pyplot as plt
x = torch.linspace(-10.0,10.0,10, requires_grad=True)
Y = x**2
y = torch.sum(x**2)
y.backward()
plt.plot(x.detach().numpy(), Y.detach().numpy(), label="Y")
plt.plot(x.detach().numpy(), x.grad.detach().numpy(), label="derivatives")
plt.legend()
Run Code Online (Sandbox Code Playgroud) 因此,我对 Python 中的 ML/AI 游戏相对较新,目前正在研究围绕 XGBoost 自定义目标函数实现的问题。
我的微分方程知识相当生疏,所以我创建了一个带有梯度和 hessian 的自定义 obj 函数,该函数对均方误差函数进行建模,该函数作为 XGBRegressor 中的默认目标函数运行,以确保我正确执行所有这些操作。问题是,模型的结果(错误输出很接近,但在大多数情况下并不相同(并且在某些点上相差很大)。我不知道我做错了什么,也不知道如果我做错了什么,这怎么可能我的计算是正确的。如果你们都可以看看这个,也许可以深入了解我错在哪里,那就太棒了!
没有自定义函数的原始代码是:
import xgboost as xgb
reg = xgb.XGBRegressor(n_estimators=150,
max_depth=2,
objective ="reg:squarederror",
n_jobs=-1)
reg.fit(X_train, y_train)
y_pred_test = reg.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
我的 MSE 自定义目标函数如下:
def gradient_se(y_true, y_pred):
#Compute the gradient squared error.
return (-2 * y_true) + (2 * y_pred)
def hessian_se(y_true, y_pred):
#Compute the hessian for squared error
return 0*(y_true + y_pred) + 2
def custom_se(y_true, y_pred):
#squared error objective. A simplified version of MSE used as
#objective function. …Run Code Online (Sandbox Code Playgroud) python machine-learning gradient-descent xgboost hessian-matrix
Clipnorm 和 Clipval 之间有什么区别?
前任:opt = SGD(lr=0.01, momentum=0.9, clipnorm=1.0)
optimization gradient-descent deep-learning keras tensorflow
我试图了解基本的 pytorch autograd 系统:
x = torch.tensor(10., requires_grad=True)
print('tensor:',x)
x.backward()
print('gradient:',x.grad)
Run Code Online (Sandbox Code Playgroud)
输出:
tensor: tensor(10., requires_grad=True)
gradient: tensor(1.)
Run Code Online (Sandbox Code Playgroud)
由于x是一个标量常量并且没有函数应用于它,所以我期望0.作为梯度输出。为什么是渐变1.呢?
我昨天发布了这个问题,询问我的神经网络(我通过使用随机梯度下降的反向传播进行训练)是否陷入局部最小值.以下论文讨论了XOR神经网络中局部最小值的问题.第一个说没有局部最小值的问题,而下一篇论文(一年后写的)说在2-3-1 XOR神经网络中存在局部最小值的问题(作为除此之外,我在输入和隐藏层使用3-3-1即偏差.这两个都是摘要(我无法访问完整的论文,所以我无法阅读它):
还有另一篇论文[PDF]说最简单的XOR网络没有局部最小值,但它似乎没有谈论2-3-1网络.
现在谈到我的实际问题:我找不到任何讨论激活函数的选择,初始权重以及它对神经网络是否会陷入局部最小值的影响.我问这个问题的原因是在我的代码中我尝试使用标准的sigmoid激活函数和双曲正切激活函数.我注意到在前者中,我只有大约20%的时间被卡住,而在后者中,我往往会更频繁地被卡住.每当我第一次初始化网络时,我也会随机化我的权重,所以我想知道某一组随机权重是否更容易让我的神经网络"卡住".
至于激活功能而言,由于错误最终与由激活函数产生的输出,我在想,有是一个效果(即误差表面的变化).然而,这仅仅是基于直觉,我更喜欢一个具体的答案(对于这两点:初始权重和激活函数的选择).
artificial-intelligence backpropagation neural-network gradient-descent minima
我刚开始学习深度学习.当发现梯度下降时,我发现自己陷入困境.我知道如何实现批量梯度下降.我知道它是如何工作的,理论上小批量和随机梯度下降是如何工作的.但实在无法理解如何在代码中实现.
import numpy as np
X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
alpha,hidden_dim = (0.5,4)
synapse_0 = 2*np.random.random((3,hidden_dim)) - 1
synapse_1 = 2*np.random.random((hidden_dim,1)) - 1
for j in xrange(60000):
layer_1 = 1/(1+np.exp(-(np.dot(X,synapse_0))))
layer_2 = 1/(1+np.exp(-(np.dot(layer_1,synapse_1))))
layer_2_delta = (layer_2 - y)*(layer_2*(1-layer_2))
layer_1_delta = layer_2_delta.dot(synapse_1.T) * (layer_1 * (1-layer_1))
synapse_1 -= (alpha * layer_1.T.dot(layer_2_delta))
synapse_0 -= (alpha * X.T.dot(layer_1_delta))
Run Code Online (Sandbox Code Playgroud)
这是ANDREW TRASK博客的示例代码.它体积小,易于理解.此代码实现批量梯度下降,但我想在此示例中实现小批量和随机梯度下降.我怎么能这样做?我必须在此代码中添加/修改以分别实现小批量和随机梯度下降?你的帮助对我很有帮助.在此先感谢.(我知道这个示例代码的示例很少,而我需要将大型数据集分成小批量.但我想知道如何实现它)
python machine-learning neural-network gradient-descent deep-learning
我正在实施一项交替培训计划.该图包含两个培训操作.培训应该在这些之间交替进行.
以下是一个小例子.但它似乎在每一步都更新了两个操作系统.我怎样才能明确地在这些之间交替?
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
# Import data
mnist = input_data.read_data_sets('/tmp/tensorflow/mnist/input_data', one_hot=True)
# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]), name='weights')
b = tf.Variable(tf.zeros([10]), name='biases')
y = tf.matmul(x, W) + b
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
global_step = tf.Variable(0, trainable=False)
tvars1 = [b]
train_step1 = tf.train.GradientDescentOptimizer(0.5).apply_gradients(zip(tf.gradients(cross_entropy, tvars1), tvars1), global_step)
tvars2 = [W]
train_step2 = tf.train.GradientDescentOptimizer(0.5).apply_gradients(zip(tf.gradients(cross_entropy, …Run Code Online (Sandbox Code Playgroud) python machine-learning gradient-descent autodiff tensorflow
gradient-descent ×10
python ×7
tensorflow ×3
keras ×2
pytorch ×2
autodiff ×1
autograd ×1
matplotlib ×1
mini-batch ×1
minima ×1
optimization ×1
torch ×1
xgboost ×1