python - 如何为每个输入获取keras模型中层的权重
问题描述
我知道您可以通过 Model.layer[layer_number].getWeights() 在某个点从 keras 模型中获取层的权重。我只是在训练期间使用回调来获得一个时期或一批的权重。
但我想获得训练部分中每个输入的层权重。或者如果可能的话,为每个输入激活一个层而不是一个纪元。
有没有办法做到这一点?
解决方案
这是一个小例子。您可以custom callbacks
在其中使用可以按层访问模型的权重(包括激活 ( layers.Activation
))。只需根据您的需要进行更改。
这将在每个 epoch 之后打印权重,您可以绘制它们/保存它们,或者如果需要对它们运行任何操作。
from tensorflow.keras.layers import *
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.optimizers import Adam
import tensorflow as tf
import numpy as np
from keras.callbacks import LambdaCallback
model=Sequential()
model.add(Dense(32,activation='linear',input_shape=(37,10)))
model.add(Dense(32,activation='linear'))
model.add(Dense(10,activation='linear'))
model.compile(loss='mse',optimizer=Adam(lr=.001),metrics=['accuracy'])
model.summary()
class MyCustomCallback(tf.keras.callbacks.Callback):
def on_train_batch_begin(self, batch, logs=None):
print(model.layers[0].get_weights())
def on_train_batch_end(self, batch, logs=None):
print(model.layers[0].get_weights())
def on_test_batch_begin(self, batch, logs=None):
pass
def on_test_batch_end(self, batch, logs=None):
pass
X_train = np.zeros((10,37,10))
y_train = np.zeros((10,37,10))
weight_print = MyCustomCallback()
model.fit(X_train,
y_train,
batch_size=32,
epochs=5,
callbacks = [weight_print])
推荐阅读
- visual-studio - 已移除的视觉对象显示在实时视觉对象树中
- html - 当我调整窗口大小时,我的页脚前出现了一个全新的空白区域,我不知道为什么
- python - 给定数组 [1, 5, 6, -11, 6, 2] 当加在一起等于 X 时返回对
- rust - Rust 中的 Bindgen 未定义引用
- javascript - 无法使用 Nuxt 和 iView 自定义主题
- numpy - numpy - 解释“np.copy 是浅拷贝,不会复制数组中的对象元素”
- javascript - 如何在 ReactJS 中显示餐厅的相关项目
- aws-secrets-manager - 如何在区域之间同步秘密管理器中的密码
- amazon-web-services - AWS Lambda:在第二次调用期间不会重新加载曾经需要的文件
- .net - AWS Lambda 容器无法启动 Kestrel 权限被拒绝