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