从Keras / Tensor流动模型获得可用的系数权重

时间:2017-12-04 20:44:49

标签: python numpy tensorflow keras

我使用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将其应用于新测试图像的任何想法?

1 个答案:

答案 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)

即可