2017-09-14 28 views
1

如何在Keras中的每个时期之后获得Conv2D图层的所有滤镜(如32,64等)的权重?我提到这一点,因为初始权重是随机的,但优化后它们会改变。如何获得Conv2D图层滤镜的权重

我检查了this answer但不明白。请帮助我找到解决所有过滤器和每个时代后的权重的解决方案。

还有一个问题是Keras文档中的Conv2D图层输入形状是(samples,channels,rows,cols)。 samples究竟意味着什么?它是我们拥有的输入总数(如在MNIST数据集中是60,000个训练图像)还是批量大小(如128或其他)?

+1

你到底明白了什么?你需要具体,否则它是一个重复的问题。 –

+0

假设我在keras中制作了一个类似Conv2D(64,(3,3),activation ='relu')的模型,这意味着没有过滤器是64并且每个过滤器的大小是3 * 3。对于任何模型的第一次迭代,这些64 * 3 * 3值通过让我们说glorot_uniform初始化,然后在model.compile中初始化,我使用sgd优化器。现在,这64位文件员将获得新的价值。我想看到这些新的价值。 – Hitesh

+1

我知道。你链接的问题提供了答案。你还没有解释你从另一个问题中不了解的内容。 –

回答

2

样品=批量大小=图像的数量在一个批处理

Keras会经常使用None这个维度,这意味着它可以改变你不必设置。

虽然这方面确实存在,当你创建一个层,你通过input_shape没有它:

Conv2D(64,(3,3), input_shape=(channels,rows,cols)) 
#the standard it (rows,cols,channels), depending on your data_format 

为每个时间段(或批次)后都做的动作,你可以使用一个LambdaCallback,经过on_epoch_end功能:

#the function to call back 
def get_weights(epoch,logs): 
    wsAndBs = model.layers[indexOfTheConvLayer].get_weights() 
    #or model.get_layer("layerName").get_weights() 

    weights = wsAndBs[0] 
    biases = wsAndBs[1] 
    #do what you need to do with them 
    #you can see the epoch and the logs too: 
    print("end of epoch: " + str(epoch)) for instance 

#the callback 
from keras.callbacks import LambdaCallback 
myCallback = LambdaCallback(on_epoch_end=get_weights) 

通过这个回调训练功能:

model.fit(...,...,... , callbacks=[myCallback]) 
+0

我在mnist数据集中使用了批量大小= 128 – Hitesh

+1

好的,你是对的。但这个方面不应该让我们担心。它是自动计算的,我们不需要将它放在图层中。我们必须把'conv2D(filers,kernel_size,input_shape =(side1,side2,channels))' –

相关问题