(Python) 초보입니다..! python class문에 대해서 문의드립니다!
조회수 2226회
안녕하세요, 저는 python을 시작한지 얼마 안된 학생입니다!
class문으로 작성 된 코드를 보던 중, 서로 다른 class문에 정의된 method를
다른 class에서 어떻게 불러오는지 궁금해서 질문드립니다!
아래의 code문에서 <이곳!> 이라고 표시되어 있는 곳인데요,
<질문!> 첫번째 class에서 쓰인 HiddenLayer 는 두번째 class의 이름인데요! 그렇다고 하면 그냥 저렇게 HiddenLayer에서 어떤값이 반환되길래 첫번째 class에서 값으로 쓰 일 수 있는지 궁금합니다..!
<질문!> 첫번째 class 안에서 보면,
layer_input = self.hidden_layers[i].forward(input=layer_input) 라는 문장이 있는데요,
forward라는 메서드는 해당 class안에 없는데(두번째 class에 있는 것 같습니다.) self.hidden_layers.forward로 불러오는게 가능한가요? 설명좀 부탁드립니다 ㅠㅠ
<첫번째 클래스>
#First class
class Dropout(object):
def __init__(self, input, label,\
n_in, hidden_layer_sizes, n_out,\
rng=None, activation=ReLU):
self.x = input
self.y = label
self.hidden_layers = []
self.n_layers = len(hidden_layer_sizes)
if rng is None:
rng = numpy.random.RandomState(1234)
assert self.n_layers > 0
# construct multi-layer
for i in xrange(self.n_layers):
# layer_size
if i == 0:
input_size = n_in
else:
input_size = hidden_layer_sizes[i-1]
# layer_input
if i == 0:
layer_input = self.x
else:
layer_input = self.hidden_layers[-1].output()
# construct hidden_layer
<이곳!> hidden_layer = HiddenLayer(input=layer_input,
n_in=input_size,
n_out=hidden_layer_sizes[i],
rng=rng,
activation=activation)
self.hidden_layers.append(hidden_layer)
............생략
<이곳!> layer_input = self.hidden_layers[i].forward(input=layer_input)
<두번째 클래스>
class HiddenLayer(object):
def __init__(self, input, n_in, n_out,\
W=None, b=None, rng=None, activation=tanh):
if rng is None:
rng = numpy.random.RandomState(1234)
if W is None:
a = 1. / n_in
W = numpy.array(rng.uniform( # initialize W uniformly
low=-a,
high=a,
size=(n_in, n_out)))
if b is None:
b = numpy.zeros(n_out) # initialize bias 0
self.rng = rng
self.x = input
self.W = W
self.b = b
if activation == tanh:
self.dactivation = dtanh
elif activation == sigmoid:
self.dactivation = dsigmoid
elif activation == ReLU:
self.dactivation = dReLU
else:
raise ValueError('activation function not supported.')
self.activation = activation
.......................생략
def forward(self, input=None):
return self.output(input=input)
.......................생략
자세한 내용은 출처를 남겨놓겠습니다! 출처 : https://gist.github.com/yusugomori/cf7bce19b8e16d57488a/6ffcc0270bece06cbc200b54e606b6dc3f4eb905
1 답변
-
텐서플로우 코드를 보고 계신건가요? 공부하는 모습이 멋지십니다.
작성자님이 말씀하신 첫 번째 클래스는 Dropout이고 두 번재 클래스는 HiddenLayer입니다.
질문하신 내용에 답변하기 위해서는 클래스와 인스턴스의 개념에 대해 알아야 합니다. 클래스는 일종의 설계도이며, 인스턴스는 제품이라고 생각하시면 편할 것 같습니다. 설계도는 말 그대로 해당 클래스가 어떤 멤버변수와 메소드를 가지고 있는지 정의해놓은 것입니다. 클래스의 멤버변수 및 메소드를 실제로 사용하기 위해서는 인스턴스는 생성해야 합니다. 첫 번째 질문이 인스턴스의 개념입니다. Dropout클래스에서 HiddenLayer 클래스변수를 내부적으로 가지고 있는 것이죠.
다시 말해, Dropout 클래스의 멤버변수로 HiddeLayer타입의 변수가 있다는 뜻이지요. 아래 그림과 같이 정리할 수 있습니다.
또 모르시는 게 있으면 질문주세요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력