Conversation
| import sys,os | ||
| moto=os.getcwd()[:-5]+'iki/' | ||
| sys.path.append(moto) |
There was a problem hiding this comment.
このへんこまってるなら pathっていう3.8系くらいから追加された標準ライブラリ結構使えるかもです.
|
Pull Requestの名前も書えといてください |
|
ミニマム、スタンダード、エクストラの設定をまずしましょう。何か結果が出た場合や作業が滞った場合などは結果をシェアして先輩や同級生のアドバイスもらえる環境づくり心がけましょう。実際こちらもコード見ただけではわからないところも多いです。add, commit, pushを忘れずに! |
|
pull requestの名前の変更,設定完了しました!!! |
Lecture_TUKR/iki/tukr_gauss/tukr.py
Outdated
| k2=kernel_f(target2,type,2) | ||
| # print(target1.shape) | ||
| # print(k1.shape,k2.shape) | ||
| k=jnp.einsum('ij,jk->ik',k1,k2) |
There was a problem hiding this comment.
110と111行目を考え直してみてください.
まず,110行目でkを2階のテンソルに丸めていますが,この次の式でxijと掛けなきゃなのにこれだとij成分が消えちゃってますね〜
There was a problem hiding this comment.
これは,取り組み方ですが,数式にでてくる項を変数だとどのようなshapeになるか書きながらやってみるといいかもです.
このへんみてるのはナイスですね〜 |
|
あと実装とは関係ないですが,Assignees(このプルリクの担当者)はイキくんですね! |
| def fit(self,): | ||
| #テスト時に入力がznのときのyを求める関数 | ||
| def kernel_f(target,type=1,jyun=-1): | ||
| if(type==1): | ||
| d = jnp.sum((target[:, None, :] - target[None, :, ]) ** 2, axis=2) | ||
| k = jnp.exp(-1 / (2 * self.sigma ** 2) * d) |
There was a problem hiding this comment.
これ,self書くのがめんどくさいからこういう書き方してるんかな?(はじめてみた)
外部から参照が必要ない場合はこれでもいいかもね.(違和感すごいけど)
|
レコード型のTUKRを取り組んでいます. 計算式は間違っていないと思う. ワイヤーフレームが上手く行っていない理由は,潜在空間上の点が線上になっているため,二次元のメッシュグリッドを潜在空間として与えても教師データにない点が多いためだと思う. 次は,潜在空間を1次元にして試してみる. wire_zk.mp4y_zn.mp4zn1.mp4zn2.mp4 |
学習ができているかの確認の段階はまずはデータの推定値$\hat{x}_n = f(z_n)$を描画してみるといいと思います.単純に与えられたデータに近くにきているかでまず判断しやすいので.
この潜在空間の話は直積潜在空間$\mathcal{U} \times \mathcal{V}$の空間の話でしょうか.それとも個別の潜在空間$\mathcal{U}$の話でしょうか |
y_zn.mp4がデータの推定値とデータとの比較の動画だと思います.これを見る限り,学習は出来ている!?
個別の潜在空間の話です. |
あ,本当ですね!これをみると,$x_{ij} \simeq f(u_i, u_j)$という学習はできてそうですね. |
なるほど,$\mathcal{U} \times \mathcal{V}$の直積空間の次元数はそれぞれ2と2だったら4次元になりますね.つまり,4次元多様体でfittingするような感じになります.一方でそれぞれの次元数が1と1だったら2次元になります. |
|
u,vの潜在空間を両方とも一次元にしてみました. 潜在空間は,uの最小値から最大値のlinspace 100,vの最小値から最大値のlinspace 100としている. wire_zk.mp4計算式が間違っているかと思い,学習に用いた潜在空間を使ってみたら,同じところに出来たので,計算式は間違っていないと思う. wire_zk.mp4y_zn.mp4最初のやりかたでは潜在空間が関係データっぽくなかったので,学習時の潜在空間ををソートして([[9,2][2,2][9,1][2,1]]とあったら,[[2,1][2,2][9,1][9,2]])としたら,また線になった.欠損のない関係データにしているから,ソートをしても組み合わせは変わらずに順番が変わるだけだから,少なくとも,y_znのように点が散らばると思ったが,そうではなかった. wire_zk.mp4y_zn.mp4 |
|
@ryusei-iki |
学習時の潜在変数をソートしたらワイヤーフレームは表示することはできた. wire_zk.mp4y_zk.mp4y_zn.mp4 |
zetaを確認したら,片方の潜在変数が一つの値を繰り返してはいなかった.他に線になる理由を見つけた.uとvを両方とも単調増加させてペアにしてたのが線になる理由だと思う.zetaを100にするとしたら,今まではnp.arange(100)にしていた.これをnp.arange(10)を作って,その組み合わせで100個のペアを作った.そしたら出来た. wire_zk.mp4y_zk.mp4y_zn.mp4 |
なるほど!!!!ナイファイっす!!!ほんとに. |
|
徳永くんにもいったんですが,いきくんもvisualizerのprojectに関わってるので, |
|
TUKRのtensorでの実装が出来ました. wire_zk.mp4zn1.mp4zn2.mp4 |
|
さすが!!!いい感じですね! |
|
早速対応してくれてありがとう! |
そうです.
やってみます. |
広渡さんもいってますが,ここに着目するのはかなりいいと思うので,観察してみるとよいです |
TetraMiyazaki
left a comment
There was a problem hiding this comment.
観測空間の色付けとここの潜在空間のの色付けの対応がわからないです.
UKRのときはちゃんとデータの位相がとれているかを色付けで確認しましたよね.関係データのほうもちゃんと位相がとれているかを色付けで示すようにしてください.
self.ZN1_calc=np.zeros((self.X1_num*self.X2_num,self.L))






minimum
standard
extra