5

調整目的でニュートラル ネットワークの結果の中央値を知りたいです。モデルを設計し、keras.backend.function を使用しましたが、失敗しました (AttributeError: レイヤーが密集していません。返す入力がありません)。これが私の例です:

import tensorflow as tf
from tensorflow.keras.layers import Dense
from keras import backend as K
class my_model(tf.keras.Model):
    '''
    here I design a very simple model for test
    '''
    def __init__(self):
        super(my_model,self).__init__(name='my_model')

        self.dense1 = Dense(10,activation = 'relu',kernel_initializer = tf.keras.initializers.truncated_normal())
        self.dense2 = Dense(2,activation = 'softmax',kernel_initializer = tf.keras.initializers.truncated_normal())

    def call(self, inputs):
        inputs = self.dense1(inputs)
        return self.dense2(inputs)
def extract_layer_output(model, layer_name, input_data):
    layer_output_fn = K.function([model.layers[0].input], [model.get_layer(layer_name).output])
    layer_output = layer_output_fn([input_data])

    return(layer_output[0])   
X_train = np.array([[1,2], [6,5], [8,2]])
y = np.array([[0,1],[0,1],[1,0]])
model = my_model()
model.compile(optimizer=tf.train.AdamOptimizer(0.01),  
                loss='categorical_crossentropy',  # categorical_crossentropy
                metrics=['accuracy'])  # mean absolute error
model.fit(X_train,y, epochs=40, steps_per_epoch=3)   
result = extract_layer_output(model,'dense',X_train)   # 
# AttributeError: Layer dense is not connected, no input to return.

そしてAttributeError: Layer has no inbound nodes または AttributeError: The layer has never been called に触発されました

私は試した:

x_input = tf.keras.Input(shape = [2])
model(x_input)
result = extract_layer_output(model,'dense',X_train)

モデルを適合させた後、別のエラーが発生しました: TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("input_1_1:0", shape=(?, 2), dtype=float32) is not an element of this graph.

4

0 に答える 0