Keras 如何获取二维图层过滤器权重

Keras 如何获取二维图层过滤器权重,keras,Keras,如何在每个历元之后获得Keras中Conv2D层的所有过滤器(如32、64等)的权重?我提到了这一点,因为初始权重是随机的,但在优化之后它们会改变 我检查了一下,但不明白。请帮助我找到一个解决方案,获得所有过滤器的权重,并在每个历元之后 还有一个问题是,在Keras文档中,Conv2D层的输入形状是(样本、通道、行、列)。samples的确切含义是什么?是我们拥有的输入总数(如MNIST数据集中的60.000个训练图像)还是批量大小(如128个或其他)?样本=批量大小=一批中的图像数量 Kera

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

我检查了一下,但不明白。请帮助我找到一个解决方案,获得所有过滤器的权重,并在每个历元之后


还有一个问题是,在Keras文档中,Conv2D层的输入形状是(样本、通道、行、列)。
samples
的确切含义是什么?是我们拥有的输入总数(如MNIST数据集中的60.000个训练图像)还是批量大小(如128个或其他)?

样本=批量大小=一批中的图像数量

Keras经常对此维度使用
None
,这意味着它可以变化,您不必设置它

尽管该尺寸实际上存在,但在创建图层时,将传递
input\u shape
,而不传递该尺寸:

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

要在每个历元(或批处理)之后执行操作,您可以使用,在历元结束时传递
函数:

#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])
将此回调传递给培训函数:

#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])

你到底不明白什么?假设我在keras中制作一个模型,它有一个像Conv2D(64,(3,3),activation='relu')这样的层,这意味着过滤器的数量是64,每个过滤器的大小是3*3。对于任何模型的第一次迭代,这些64*3*3值由glorot_统一初始化器初始化,然后在model.compile中使用sgd优化器。这意味着现在这64个文件将获得新的值。我想看到这些新的价值观,我知道。您链接的问题提供了答案。你没有解释你从另一个问题中不明白的地方。我得到了我第一个问题的答案。model.layers[层索引].get_weights()[0]将显示权重。我只是想问一下,在keras的Conv2D层中,样本是什么意思?我拥有的输入总数或批量大小。因为在tensorflow文档中,他们提到了Conv层的批处理大小。我在mnist data setOk中使用了批处理大小=128,你是对的。但这个维度不应该让我们担心。它是自动计算的,我们不需要把它放在图层中。我们必须将
Conv2D(文件服务器、内核大小、输入形状=(side1、side2、通道))