【发布时间】:2021-09-23 16:32:11
【问题描述】:
在 keras 中可以计算不可训练权重的数量,例如 by
from tensorflow.keras import backend as K
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, Dense
#Dummy Keras model
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, input_dim=3072,activation="relu", name="inputlayer"),
tf.keras.layers.Dense(512, activation="tanh", name="2ndlayer"),
tf.keras.layers.Dense(512, activation="tanh", name="3rdlayer"),
tf.keras.layers.Dense(512, activation="tanh", name="4thlayer"),
tf.keras.layers.Dense(512, activation="tanh", name="5thlayer"),
tf.keras.layers.Dense(3, name="lastlayer"),
])
trainable_count = int(np.sum([K.count_params(p) for p in set(model.trainable_weights)]))
non_trainable_count = int(np.sum([K.count_params(p) for p in set(model.non_trainable_weights)]))
print('Total params: {:,}'.format(trainable_count + non_trainable_count))
print('Trainable params: {:,}'.format(trainable_count))
print('Non-trainable params: {:,}'.format(non_trainable_count))
我有一个带有自定义层的自定义 tesorflow 1.15 模型,所以我无法利用 Keras。我知道我可以通过以下方式计算自定义模型中的可训练参数:
#Dummy data
x = np.zeros((1,16,16,3))
#Dummy tf model
x_tf = tf.convert_to_tensor(x, np.float32)
z_tf = tf.layers.conv2d(x_tf, filters=32, kernel_size=(3,3))
zz_tf = tf.layers.conv2d(z_tf, filters=32, kernel_size=(3,3))
trainable_count = np.sum([np.prod(v.shape) for v in tf.trainable_variables()])
print(trainable_count)
我的问题是如何访问我的 tensorflow 模型的不可训练权重?
在 keras 中,它是使用 non_trainable_count = int(np.sum([K.count_params(p) for p in set(model.non_trainable_weights)])) 完成的,所以我正在寻找等效的命令而不调用 keras api。
【问题讨论】:
-
model.summary() 将打印模型的可训练和不可训练参数的总数。
-
据我所知 model.summary() 仅适用于 keras 模型。我正在寻找不使用 keras 的纯 tensorflow 1.15 模型的等效命令。
标签: python tensorflow keras memory tf.keras