Vla*_*tiy 11 convolution keras keras-layer
我将Conv2D层定义为:
Conv2D(96, kernel_size=(5, 5),
activation='relu',
input_shape=(image_rows, image_cols, 1),
kernel_initializer=initializers.glorot_normal(seed),
bias_initializer=initializers.glorot_uniform(seed),
padding='same',
name='conv_1')
Run Code Online (Sandbox Code Playgroud)
这是我网络中的第一层.
输入尺寸为64 x 160,图像为1通道.
我试图从这个卷积层可视化权重,但不知道如何获得它们.
这是我现在这样做的方式:
1.Call
layer.get_weights()[0]
Run Code Online (Sandbox Code Playgroud)
这会形成一系列形状(5,5,1,96).1是因为图像是1通道.
2.使用5乘5过滤器
layer.get_weights()[0][:,:,:,j][:,:,0]
Run Code Online (Sandbox Code Playgroud)
非常难看,但我不知道如何简化这一点,任何评论都非常感激.
我不确定这些5乘5个方格.他们实际过滤了吗?
如果不是,请告诉我们如何正确地从模型中获取过滤器?
Joh*_*ohn 14
我试图显示权重,只有前25个.我有同样的问题,你做的是这个过滤器或其他东西.它似乎与源自深度置信网络或堆叠RBM的过滤器不同.
这是经过训练的重量:
奇怪的是训练后没有变化!如果你比较它们是相同的.
如果我设置kernel_intialization ="ones",那么我会得到看起来不错的过滤器,但是尽管有许多试验和错误更改,但净损失从未减少:

以下是显示2D Conv权重/过滤器的代码.
ann = Sequential()
x = Conv2D(filters=64,kernel_size=(5,5),input_shape=(32,32,3))
ann.add(x)
ann.add(Activation("relu"))
Run Code Online (Sandbox Code Playgroud)
...
x1w = x.get_weights()[0][:,:,0,:]
for i in range(1,26):
plt.subplot(5,5,i)
plt.imshow(x1w[:,:,i],interpolation="nearest",cmap="gray")
plt.show()
ann.fit(Xtrain, ytrain_indicator, epochs=5, batch_size=32)
x1w = x.get_weights()[0][:,:,0,:]
for i in range(1,26):
plt.subplot(5,5,i)
plt.imshow(x1w[:,:,i],interpolation="nearest",cmap="gray")
plt.show()
Run Code Online (Sandbox Code Playgroud)
--------------------------- UPDATE ---------------------- -
所以我再次尝试了它,学习率为0.01而不是1e-6,并通过将图像除以255.0来使用归一化在0和1而不是0和255之间的图像.现在卷积滤波器正在改变,第一个卷积滤波器的输出如下:

您会注意到训练有素的过滤器会以合理的学习率进行更改(不是很多):
如果我采用最后的卷积层(中间没有密集层)并将其提供给未经训练的分类器,则类似于根据准确度对原始图像进行分类,但如果我训练卷积层,则最后的卷积层输出会提高精度.分类器(随机森林).
所以我会得出结论,卷积层确实是滤波器和权重.
| 归档时间: |
|
| 查看次数: |
9382 次 |
| 最近记录: |