※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。
def execonce():
# Initialize model
model = MyAE()
optimizer = optimizers.SGD()
optimizer.setup(model)
# Learn
n = 150
for j in range(3000):
x = Variable(xtrain)
model.cleargrads() # model.zerograds() は古い
loss = model(x)
loss.backward()
optimizer.update()
# get middle layer data
x = Variable(xtrain, volatile='on')
yt = F.sigmoid(model.l1(x))
ans = yt.data
return ans
学習が終わったところで、今度はmodelではなく、その中の中間層の値が決まる所まで実行し、中間層のノードが入っているdataだけを取り出して返す。
これで、execonce()を呼ぶと、各入力データに対する中間層の2ノードの値がまとめて帰ってくる。>>> ans = execonce() >>> ans.shape (150, 2) >>> ans[:5] array([[ 0.99554908, 0.00865224], [ 0.99200833, 0.01623198], [ 0.99302506, 0.01248077], [ 0.992621 , 0.02188915], [ 0.99591887, 0.00837815]], dtype=float32) >>>ちゃんとデータ数150個に対し、2つの値が求まっている。