我需要在卷积神经网络(CNN)中找到关于单个卷积滤波器的输入层的梯度,作为可视化滤波器的方法.
给定Caffe的Python接口中经过训练的网络(例如本示例中的网络),如何根据输入层中的数据找到conv-filter的渐变?
编辑:
根据cesans的回答,我添加了以下代码.我输入图层的尺寸是[8, 8, 7, 96].我的第一个转换层conv1有11个过滤器,大小为1x5,导致尺寸[8, 11, 7, 92].
net = solver.net
diffs = net.backward(diffs=['data', 'conv1'])
print diffs.keys() # >> ['conv1', 'data']
print diffs['data'].shape # >> (8, 8, 7, 96)
print diffs['conv1'].shape # >> (8, 11, 7, 92)
Run Code Online (Sandbox Code Playgroud)
从输出中可以看出,返回的数组net.backward()的尺寸等于Caffe中我的图层的尺寸.经过一些测试后,我发现这个输出分别是data层和conv1层的损耗梯度.
但是,我的问题是如何根据输入层中的数据找到单个转换滤波器的梯度,这是另外的.我怎样才能做到这一点?
我正在尝试一个不按预期行事的Op.
graph = tf.Graph()
with graph.as_default():
train_dataset = tf.placeholder(tf.int32, shape=[128, 2])
embeddings = tf.Variable(
tf.random_uniform([50000, 64], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_dataset)
embed = tf.reduce_sum(embed, reduction_indices=0)
Run Code Online (Sandbox Code Playgroud)
所以我需要知道Tensor的尺寸embed.我知道它可以在运行时完成,但这对于这么简单的操作来说太过分了.什么是更简单的方法呢?
我想用神经网络超参数和模型架构编写一个*.txt文件.是否可以将对象model.summary()写入我的输出文件?
(...)
summary = str(model.summary())
(...)
out = open(filename + 'report.txt','w')
out.write(summary)
out.close
Run Code Online (Sandbox Code Playgroud)
碰巧我正在得到一个"无",你可以在下面看到.
Hyperparameters
=========================
learning_rate: 0.01
momentum: 0.8
decay: 0.0
batch size: 128
no. epochs: 3
dropout: 0.5
-------------------------
None
val_acc: 0.232323229313
val_loss: 3.88496732712
train_acc: 0.0965207634216
train_loss: 4.07161939425
train/val loss ratio: 1.04804469418
Run Code Online (Sandbox Code Playgroud)
知道怎么处理吗?谢谢
我通过以下步骤(广泛地)使用Keras库训练了情绪分类器模型.
现在,使用此模型进行评分,我能够将模型保存到文件并从文件加载.但是我没有找到将Tokenizer对象保存到文件的方法.如果没有这个,我每次需要得到一个句子时都必须处理语料库.有没有解决的办法?
我最近研究过有监督学习和无监督学习.从理论上讲,我知道有监督意味着从标记数据集中获取信息而无监督意味着在没有给出任何标签的情况下对数据进行聚类.
但是,问题是我总是感到困惑,以确定在我的学习期间给定的例子是监督学习还是无监督学习.
谁能请一个现实生活中的例子?
machine-learning data-mining unsupervised-learning supervised-learning deep-learning
我无法理解为什么dropout在tensorflow中这样工作.CS231n的博客说,"dropout is implemented by only keeping a neuron active with some probability p (a hyperparameter), or setting it to zero otherwise."你也可以从图片中看到这个(取自同一网站)

来自tensorflow网站, With probability keep_prob, outputs the input element scaled up by 1 / keep_prob, otherwise outputs 0.
现在,为什么输入元素按比例放大1/keep_prob?为什么不保持输入元素的概率而不是用它来缩放1/keep_prob?
我无法找到Keras如何定义"准确性"和"损失".我知道我可以指定不同的指标(例如mse,交叉熵) - 但keras打印出标准的"准确度".这是如何定义的?同样对于损失:我知道我可以指定不同类型的正规化 - 那些是亏损的吗?
理想情况下,我想打印出用于定义它的等式; 如果没有,我会在这里找到答案.
我正在使用Lasagne为MNIST数据集创建CNN.我正密切关注这个例子:卷积神经网络和Python特征提取.
我目前拥有的CNN架构(不包括任何丢失层)是:
NeuralNet(
layers=[('input', layers.InputLayer), # Input Layer
('conv2d1', layers.Conv2DLayer), # Convolutional Layer
('maxpool1', layers.MaxPool2DLayer), # 2D Max Pooling Layer
('conv2d2', layers.Conv2DLayer), # Convolutional Layer
('maxpool2', layers.MaxPool2DLayer), # 2D Max Pooling Layer
('dense', layers.DenseLayer), # Fully connected layer
('output', layers.DenseLayer), # Output Layer
],
# input layer
input_shape=(None, 1, 28, 28),
# layer conv2d1
conv2d1_num_filters=32,
conv2d1_filter_size=(5, 5),
conv2d1_nonlinearity=lasagne.nonlinearities.rectify,
# layer maxpool1
maxpool1_pool_size=(2, 2),
# layer conv2d2
conv2d2_num_filters=32,
conv2d2_filter_size=(3, 3),
conv2d2_nonlinearity=lasagne.nonlinearities.rectify,
# layer maxpool2
maxpool2_pool_size=(2, 2),
# Fully Connected …Run Code Online (Sandbox Code Playgroud) neural-network deep-learning conv-neural-network lasagne nolearn
我想计算NN模型的确定性/置信度(参见我的深层模型不知道的内容) - 当NN告诉我图像代表"8"时,我想知道它是多么确定.我的模型99%确定它是"8"还是51%它是"8",但也可能是"6"?有些数字是相当暧昧的,我想知道模型只是"翻转硬币"的图像.
我已经找到了一些关于这个的理论着作,但是我把它放在代码中有困难.如果我理解正确的话,我应该多次评估测试图像,同时"消灭"不同的神经元(使用辍学)然后......?
在MNIST数据集上工作,我正在运行以下模型:
from keras.models import Sequential
from keras.layers import Dense, Activation, Conv2D, Flatten, Dropout
model = Sequential()
model.add(Conv2D(128, kernel_size=(7, 7),
activation='relu',
input_shape=(28, 28, 1,)))
model.add(Dropout(0.20))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Dropout(0.20))
model.add(Flatten())
model.add(Dense(units=64, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(units=10, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
model.fit(train_data, train_labels, batch_size=100, epochs=30, validation_data=(test_data, test_labels,))
Run Code Online (Sandbox Code Playgroud)
问题:我应该如何预测这个模型,以便我也能确定预测?我会很感激一些实际的例子(最好是在Keras,但任何人都会这样做).
编辑:澄清一下,我正在寻找如何使用Yurin Gal概述的方法获得确定性(或解释为什么其他方法会产生更好的结果).
machine-learning uncertainty neural-network deep-learning keras
我只是试着找出如何使用Caffe.为此,我只是看了一下.prototxt示例文件夹中的不同文件.有一个我不明白的选择:
# The learning rate policy
lr_policy: "inv"
Run Code Online (Sandbox Code Playgroud)
可能的值似乎是:
"fixed""inv""step""multistep""stepearly""poly" 有人可以解释一下这些选择吗?
machine-learning neural-network gradient-descent deep-learning caffe
deep-learning ×10
keras ×4
python ×4
tensorflow ×3
caffe ×2
c++ ×1
data-mining ×1
lasagne ×1
nlp ×1
nolearn ×1
tensor ×1
uncertainty ×1