小编Fär*_*ani的帖子

找到关于输入的Caffe conv滤波器的梯度

我需要在卷积神经网络(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层的损耗梯度.

但是,我的问题是如何根据输入层中的数据找到单个转换滤波器的梯度,这是另外的.我怎样才能做到这一点?

c++ python neural-network deep-learning caffe

36
推荐指数
2
解决办法
6650
查看次数

pandas:使用 numba 进行 groupby 应用

使用pandas v1.1.0。

在 pandas 文档中有一个关于如何使用 numba 来加速rolling.apply()操作的很好的例子

import pandas as pd
import numpy as np

def mad(x):
    return np.fabs(x - x.mean()).mean()

df = pd.DataFrame({"A": np.random.randn(100_000)},
                  index=pd.date_range('1/1/2000', periods=100_000, freq='T')
).cumsum()

df.rolling(10).apply(mad, engine="numba", raw=True)
Run Code Online (Sandbox Code Playgroud)

我想将其调整为适用于 groupby 操作:

df['day'] = df.index.day
df.groupby('day').agg(mad)
Run Code Online (Sandbox Code Playgroud)

工作正常。

但

df.groupby('day').agg(mad, engine='numba')
Run Code Online (Sandbox Code Playgroud)

错误并给出

---------------------------------------------------------------------------
NumbaUtilError                            Traceback (most recent call last)
<ipython-input-21-ee23f1eec685> in <module>
----> 1 df.groupby('day').agg(mad, engine='numba')

~\AppData\Local\Continuum\anaconda3\envs\ds-cit-dev\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, func, engine, engine_kwargs, *args, **kwargs)
    939 
    940         if maybe_use_numba(engine):
--> 941             return self._python_agg_general(
    942                 func, *args, …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas numba bodo

6
推荐指数
1
解决办法
5295
查看次数

熊猫DataFrame转换为二进制

由于pd.DataFrame有0.0 < values < 1.0,我想将其转换为二进制值0/ 1根据定义的阈值eps = 0.5,

      0     1     2
0  0.35  0.20  0.81
1  0.41  0.75  0.59
2  0.62  0.40  0.94
3  0.17  0.51  0.29
Run Code Online (Sandbox Code Playgroud)

现在,for loop对于大型数据集,我只需要花费很长时间:

import numpy as np
import pandas as pd

data = np.array([[.35, .2, .81],[.41, .75, .59],
                [.62, .4, .94], [.17, .51, .29]])

df = pd.DataFrame(data, index=range(data.shape[0]), columns=range(data.shape[1]))
eps = .5
b = np.zeros((df.shape[0], df.shape[1]))
for i in range(df.shape[0]):
    for j in …
Run Code Online (Sandbox Code Playgroud)

python pandas

1
推荐指数
2
解决办法
68
查看次数

标签 统计

python ×3

pandas ×2

bodo ×1

c++ ×1

caffe ×1

deep-learning ×1

group-by ×1

neural-network ×1

numba ×1