我使用Keras创建了一个分类模型(带有tensorFlow后端)。此时,我希望使用模型系数为我的新模型创建Web API服务。然而,当我试图获得这些权重时,这些并不像将这些系数*特征相乘以获得预期结果那么简单。
我的训练输入矩阵是128 x 128 = 16,384的灰度图像。
model.get_weights()
[array([[[[-0.03603082, 0.1334779 , 0.10018548, -0.14283592, -0.0429921 ,
-0.03080634, 0.06451669, -0.09407537, 0.04878693, -0.14003059,
0.04794825, 0.06447313, -0.01520954, -0.10879657, 0.13521752,
-0.03230923, -0.01395164, 0.04935856, 0.06434418, -0.02601192,
0.03416487, 0.08788931, 0.0723172 , -0.12923865, 0.04022292,
-0.1328591 , -0.05803869, -0.01380468, -0.10409287, 0.14212781,
-0.08511351, -0.03992498]],
[[-0.11669005, 0.088085 , -0.......
len(model.get_weights())
#10
len(model.get_weights()[0])
#3
len(model.get_weights()[0][0])
#3
len(model.get_weights()[0][0][0])
#1
len(model.get_weights()[0][0][0][0])
#32
len(model.get_weights()[0][0][0][0][0])
#TypeError: object of type 'numpy.float32' has no len()
如果我采取所有级别10 * 3 * 3 * 1 * 32 = 2880.
所以这告诉我numpy数组有5个维度,只有2880个值?也许我在这里错过了一些东西,或者也许是一种更容易的方式。有关如何通过API将其应用于新测试图像的任何想法?
答案 0 :(得分:0)
第一层有288(3 * 3 * 1 * 32)个参数,但是下面的图层通常有更多的参数,特别是如果您的模型是CNN。
打印所有图层的参数数量(包括偏差项):
weights = model.get_weights()
for i in range(len(weights)):
print(weights[i].shape)
或者,您可以按model.summary()
要将模型应用于新图像,只需运行model.predict(image)