我需要在卷积神经网络(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层的损耗梯度.
但是,我的问题是如何根据输入层中的数据找到单个转换滤波器的梯度,这是另外的.我怎样才能做到这一点?
使用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) 由于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)