そのうちシンギュラリティを起こすblog

強い人工知能を作ってそのうちシンギュラリティを起こします。

ニューラルネットワークを逆に辿って文字コードから画像を出せるか?

Chainerのサンプルプログラム MNISTは数字の画像から10種類の数字コード?を出力する。
これを逆にして、数字コードから数字の画像を出力できないだろうか?

## MNISTのコードに追加する

model.to_cpu()

a = np.linalg.pinv( model.l3.W )
b = np.linalg.pinv( model.l2.W )
c = np.linalg.pinv( model.l1.W )

d = np.dot(b,a)
e = np.dot(c,d)

for ii in xrange(10):
    f = np.array([0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],np.float32)
    f[ii] = 1.0
    g = np.dot(e,f).reshape(28,28)
    g = g / np.linalg.norm(g)
    img = Image.new('RGB',(28,28) )
    for y in xrange(28):
        for x in xrange(28):
            v = g[x][y]
            if v>1.0: v=1.0
            if v<0: v=0.0
            vv = int( v*255 )

            img.putpixel( (x,y) ,(vv,vv,vv)  )

    img.save("out"+str(ii)+".png",'PNG')

ものすごくテキトーなコードだけど、これでどうなんでしょうか?
行列の代わりに逆行列(pseudo-inverse matrix)を使って計算しています。
でもこれだと結局ノイズみたいな画像しか出てこなくて失敗っぽいです。
もし上手く行くんだったら教えて欲しいです。

漢字を読むことはできるけど書くことができないってことよくありますよね?
読む回路と書く回路は別に作る必要があるんじゃないかって気がしました。