[英]How to visualize the learned trained weights in a keras model for all of its layers?
[英]How to Create a Trained Keras Model Through Setting the Weights
我正在嘗試將訓練有素的鏈接器模型轉換為訓練有素的keras模型,希望將其轉換為coreml。 我這樣做的嘗試是通過直接設置實例化keras模型的權重,使其具有與鏈接器模型相同的體系結構。 通過調試,我注意到在Keras中設置權重矩陣的形狀時會對其進行轉置。 問題是兩個模型的輸出不同。 在keras模型中,第一層正確地輸出了一些輸出,但是大多數輸出都以不可預測的方式歸零。 我缺少訓練過的keras模型的其他參數嗎?
import chainer
import cv2 as cv
import numpy as np
import argparse
import sys
import os
import evaluation_util
from keras.layers import merge, Convolution2D, Input
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
import projection_gan
import keras
from keras.layers import Dense, Input, Activation
from keras.models import Model
from keras.utils import plot_model
def create_keras_model():
inputs = Input(shape=(34,))
l1 = Dense(1024, activation='relu')(inputs)
l2 = Dense(1024, activation='relu')(l1)
l3 = Dense(1024)(l2)
l3 = keras.layers.add([l1,l3])
l3 = Activation('relu')(l3)
l4 = Dense(17)(l3)
model = Model(inputs=inputs, outputs=l4)
return model
def main(args):
model = evaluation_util.load_model(vars(args))
chainer.serializers.load_npz(args.lift_model, model)
keras_model = create_keras_model()
plot_model(keras_model, to_file='model.png')
weights_list = [model.l1.W.array.transpose(), model.l1.b.array,
model.l2.W.array.transpose(), model.l2.b.array,
model.l3.W.array.transpose(), model.l3.b.array,
model.l4.W.array.transpose(), model.l4.b.array]
keras_model.set_weights(weights_list)
keras_model.save("keras.h5")
第一層的樣本輸出:
鏈接器(正確的型號):
0.012310047,-0.0038410246、0.019623855、0.01872946,-0.010116328,...
Keras:
0.012310054、0.0、0.0、0.01872946、0.0,...
在keras中,圖層與激活功能一起定義。 而L.Linear
層僅用於線性操作,沒有任何激活功能。
當您將第一層定義為l1 = Dense(1024, activation='relu')(inputs)
,這是線性運算, 后跟relu運算 ,它將負值轉換為0。
這就是為什么您的keras模型的第一層輸出具有非負值的原因。
我想重量本身還可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.