Dense 하위 레이어 내에 사용자 지정 레이어가 있습니다. 이 하위 계층의 가중치에 이름을 지정할 수 있기를 원합니다. 그러나 name="my_dense"
서브 레이어 이니셜 라이저 에서 사용 하는 것은이 작업을 수행하지 않는 것 같습니다. 가중치는 단순히 외부 사용자 정의 레이어의 이름을 따서 명명됩니다.
문제를 설명하기 위해 단순히 두 개의 조밀 한 레이어를 쌓는 사용자 지정 레이어를 원한다고 가정합니다. 이 사용자 정의 레이어의 가중치 이름을 인쇄하겠습니다.
class DoubleDense(keras.layers.Layer):
def __init__(self, units, **kwargs):
self.dense1 = keras.layers.Dense(units, name="first_dense")
self.dense2 = keras.layers.Dense(units, name="second_dense")
super(DoubleDense, self).__init__(**kwargs)
def build(self, input_shape):
self.dense1.build(input_shape)
self.dense2.build(self.dense1.units)
def call(self, input):
hidden = self.dense1(input)
return self.dense2(hidden)
dd = DoubleDense(3)
# We need to evaluate the layer once to build the weights
trivial_input = tf.ones((1,10))
output = dd(trivial_input)
# Print the names of all variables in the DoubleDense layer
print([weight.name for weight in dd.weights])
출력은 다음과 같습니다.
['double_dense_1/kernel:0',
'double_dense_1/bias:0',
'double_dense_1/kernel:0',
'double_dense_1/bias:0']
...하지만 나는 다음과 같은 것을 더 기대하고 있었다.
['double_dense_1/first_dense_1/kernel:0',
'double_dense_1/first_dense_1/bias:0',
'double_dense_1/second_dense_1/kernel:0',
'double_dense_1/second_dense_1/bias:0']
따라서 Keras는 이러한 가중치를 모호하게 명명했습니다. 가중치 텐서가 속하는지 dd.dense1
또는 dd.dense2
그 이름만으로는 알 수있는 방법이 없습니다 . 먼저 레이어를 선택한 다음 가중치 ( dd.dense1.weights
) 를 선택할 수 있다는 것을 알고 있지만 응용 프로그램에서는이 작업을 수행하지 않는 것이 좋습니다.
사용자 정의 레이어의 하위 레이어 가중치에 이름을 지정하는 방법이 있습니까?
하위 클래스 레이어의 이름을 원하면 각 레이어 를 포함 name_scope
하고 호출 해야합니다 build
.
다음은 출력의 각 레이어에 이름을 부여하는 수정 된 코드입니다.
class DoubleDense(keras.layers.Layer):
def __init__(self, units, **kwargs):
self.dense1 = keras.layers.Dense(units)
self.dense2 = keras.layers.Dense(units)
super(DoubleDense, self).__init__( **kwargs)
def build(self, input_shape):
with tf.name_scope("first_dense"):
self.dense1.build(input_shape)
with tf.name_scope("second_dense"):
self.dense2.build(self.dense1.units)
def call(self, input):
hidden = self.dense1(input)
return self.dense2(hidden)
dd = DoubleDense(3)
# We need to evaluate the layer once to build the weights
trivial_input = tf.ones((1,10))
output = dd(trivial_input)
# Print the names of all variables in the DoubleDense layer
print([weight.name for weight in dd.weights])
산출:
['double_dense/first_dense/kernel:0', 'double_dense/first_dense/bias:0', 'double_dense/second_dense/kernel:0', 'double_dense/second_dense/bias:0']
이것이 귀하의 질문에 대한 답이되기를 바랍니다. Happy Learning!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다