調整目的でニュートラル ネットワークの結果の中央値を知りたいです。モデルを設計し、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.