スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

世の中は進んでいる

lineスタンプ、Tシャツ販売、元手ゼロ。
世の中は進んでるなあ。
プリントTシャツなんて画像さえあればいいので、在庫ゼロでネットショップが始められる。
僕はSuzuriというサービスを利用したけど他にもいくつか選択肢はある。
最近はクラウドソーシングとかいう、ネットで気軽に副業出来るようなサービスもあるし、職を失ったとしても在宅でバイト代くらい稼げる気もする。
調べてみると電子書籍は元手ゼロで出版出来るらしいし、紙の本にしても5000円程度で出来るらしい。次は本書いてみたいな。
何の本がいいかな、と考えてみたのだが、高校数学の本とか書きやすそうだと思って書き始めた。
高校数学が実際に研究開発の現場でどのように役立っているか具体例を挙げながら解説するような本を書きたい。
出版までいかなくても、子供に数学質問された時に使える資料になるしね。
ジャジャガッチ | その他 | 23:56 | comments(0) | trackbacks(0) |

Lineスタンプ作ってみた

lineスタンプ作ってみた。
あと調子に乗ってTシャツも作ってみた。誰でも買えるよ!
自分で注文してみた。↓
買ってくれたら雀の涙ほどのおこづかいになります。
でも振込手数料越えるほど売り上げるとは思えない(笑)
ジャジャガッチ | その他 | 23:06 | comments(0) | trackbacks(0) |

pythonでオイラー法

ここんとこちょこちょこpython書いてて、少しずつ自由が効くようになってきた。まだまだだけど。

書かないと忘れちゃうのでオイラー法でも。

 

import numpy as np
import matplotlib.pyplot as plt
f = 1.0

N = 1000
x = 0.0
dx = 0.001
for n in range(N):
    if n%100==0:
        plt.plot(x,f,'.',c='blue')
    #print(f)
    f = (1.0+dx)*f
    x += dx
X = np.arange(0,1,0.01)
Y = np.exp(X)
plt.plot(X,Y)
plt.show()

 

 

コンパイルがいらないのでvimを閉じないで気軽に実行できるのがいいね。

グラフも簡単に書けるし!

ジャジャガッチ | python | 22:48 | comments(0) | trackbacks(0) |

ディープラーニング、1週間ほどいじってみた感想

子どもが生まれる前は自由研究と称して夏休みにしょうもないことをしていたが、流石に幼い二児の父となると自由研究なんてしている余裕はない。

でも何もしないのも寂しいので、自由研究というには程遠いが前から気になっていたディープラーニングをかじってみることにした。

少し前にニューラルネットをC++で自作して、何となく分かった気になったのでフレームワークを使ってもう少し実践的にやってみることにした。

 

最初にgoogleのTensorFlowを試してみたが、ちょっと敷居が高いので断念。

 

次にH2O.aiというやつがコードなしで使えるという話を聞いたので試してみた。

しかし高次元のベクトル推定のようなことをしようと思うと不便なので、やっぱりコードは必須かな、ということでKerasを試してみることにした。

これが素晴らしい。とっても簡単にネットワークを組むことができる。

 

取り敢えず手書き数字のデータ(MNIST)10000個を使って、オートエンコーダ、ディープでないニューラルネット、ディープなニューラルネット(畳み込みニューラルネット)を試してみた。

ディープでないニューラルネットでは正答率64%程度だったものがディープラーニングでは98%以上まで改善した。

色々出来そうな準備は出来たので、ハイパーパラメータをいじったりして遊びたい。

 

勉強していて思ったことをいくつか挙げておく。ただし一週間いじっただけのにわかなので間違ったことを書いているかもしれない。

 

* 手書き数字認識(MNIST)は初めの一歩には敷居が高い

→手書き数字認識はディープラーニングではHello world的な位置付けらしく、どんなフレームワークでも大抵初めの一歩として取り上げられている。ただ、フレームワークのチュートリアルを効率的に進めるためか、学習データを拾ってきて一次元ベクトルにしてみたいな泥臭い作業は単純なメソッドで隠蔽されていたりする。泥臭い作業が隠蔽されているため、どういう形でデータがやりとりされているのがピンと来なかった。これでは実際に使う時困るだろうということで、学習データのダウンロード、画像化、ベクトル化を自分の手で行った。最初の一歩としては手書き数字のような高等な例ではなく、ふたつの正規分布から数値を乱数で取り出し、分類するような例の方がわかりやすいと思った。H2O.aiではまず始めにこれをやった。

 

* 畳み込みニューラルネットの説明がわかりづらい

→単純な全結合ネットのときはニューロン同士の接続の重みを最適化するという話だったのに、次に出て来る畳み込みニューラルネットでは急にフィルタを最適化するみたいな話になっていてわかりづらかった。フィルタとか畳み込みとかいうのはちょっと高等な理解の仕方で、低級な理解の仕方としてはある層のニューロンと次の層のニューロンを距離に依存する形で重み付けするという感じになると思う。その後にフィルタとか畳み込みという話が来ていればわかりやすい気がする。全結合ネットから話が飛びすぎている感があった。

 

* 学習データの用意が大変

→全く未知の問題を学習データなしで解くのは無理で、解きたい問題があったとき、既に解けているパターンを大量に用意できないと正しく学習できない。例えば、自分の好みの女の子かどうかを判定したいと思ったら、あらかじめ自分の好みの女の子とそうでない女の子の画像を大量に用意し、それぞれを好き/嫌いで分類しておく必要がある。これがキツい。シミュレーションで生成出来るようなものならいいんだけど。

 

*何故Python

→何故かディープラーニングではpythonが主流。普通数値計算はC/C++ or Fortranなので戸惑った。仕方ないのでpythonを勉強しながらやることにした。vim scryptもpythonで書けるらしいし覚えても損はないか。

 

ディープラーニングは今のところほぼブラックボックスでなんかふわふわしている技術な感じがする。ブラックボックスというのは、問題が解けたとしても何故解けたかどのようにして解いたかがわからないということだ。文字認識ならどういうところに注目すればよいのかというところが結局よくわからないまま。わからないけど分類できるという。まさに人工知能、目の前に機械仕掛けの脳があり、こちらから質問をして答えてもらうというイメージを持っている。ここが将来改善されることを期待する。今のままディープラーニングに傾倒しすぎると、地に足のついた技術が疎かになり、ディープラーニングの限界が見えてきた時に後悔することになりそう。僕はディープラーニングを研究する予定はないので、あくまでツールとして補助的に使っていければと考えている。

ディープラーニング自体の勉強はほそぼそと継続予定だが、同寺並行でビッグデータ収集の方法についても検討する予定。

 

ジャジャガッチ | コンピュータ | 22:52 | comments(0) | trackbacks(0) |

FightCode

FightCodeというブラウザゲームをやってみた。

javascriptでロボットの行動をプログラムして戦うゲーム。

そうそう、僕がイメージしてたのはこういうやつ!昔あったカルネージハートというゲームもこういう感じらしくて気になる。

 

たとえばこのコードは砲塔を一度ずつ回しながら索敵して視線上に敵がいたら射撃、再度砲塔回転に戻るというもの。


//FightCode can only understand your robot
//if its class is called Robot
var Robot = function(robot) {

};
var n = 1;
Robot.prototype.onIdle = function(ev) //アイドル時
{
    var robot = ev.robot;
     robot.rotateCannon(n);
 };

 

Robot.prototype.onScannedRobot = function(ev) //視線上に敵がいたとき
{
    var robot = ev.robot;
    robot.fire();
};
 

次のように変えると

 

Robot.prototype.onScannedRobot = function(ev) //視線上に敵がいたとき
{
    var robot = ev.robot;
    robot.fire();

    n = 0;
};
 

敵がみつかったら砲塔回転完全にやめて連射する。でもたぶんその後敵見失ったら絶望。

 

これ面白いぞ。

ジャジャガッチ | コンピュータ | 23:13 | comments(0) | trackbacks(0) |

unityで最速降下曲線

unityでサイクロイド曲線にボール転がしてみた。

 

まずサイクロイド曲線のパラメータを決める必要がある。

θ=0で(x,y)=(0,0)とすると

x=A(θ-sinθ)

y=A(1-cosθ)

という式で表される。(0,0)と(x0,x0)を結ぶことにすると

A(θ0-sinθ0)=A(1-cosθ0)

となる。θ0について解けばθ0≒2.41201となる。あとは具体的にx0の値を決めればAも決まる。

x0=-10として次のコードでサイクロイドの座標を生成した。

 

#include <stdio.h>
#include <math.h>

int main()
{
    double theta0 = 2.41201;
    double x0 = -10, y0 = -10;
    double A = y0 / (1 - cos(theta0));

    for (double theta=0; theta<=theta0; theta+=0.05)
    {
        double x = A*(theta - sin(theta));
        double y = A*(1 - cos(theta));
        printf("%e %e¥n", x, y);
    }

    return 0;
}

 

座標データをjwcadに取り込んでdxfファイルに変換し、creo elementsに取り込んで坂を作成した。生成したstlファイルをblenderに取り込んでobjファイルをエクスポートすればunityにインポートできる。

creo elementsに取り込むときの注意としては、ちゃんと坂をワールド原点付近にとらないと、unityで配置するとき苦労する。

スタートゲートは上キーで開くようにした。

    void Update () {
       // Destroy(gameObject);
        if (Input.GetAxis("Vertical")!=0) Destroy(gameObject);
    }

ジャジャガッチ | コンピュータ | 22:56 | comments(0) | trackbacks(0) |

unityに任意曲面データを取り込む

任意曲面でボール転がしてみたいのでまずは3dデータを作りましょう。

まずは3次元の数値データを用意します。

z = √x^2+y^2としました。

 

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

int main() {
    for (double x = -10; x <= 10; x += 0.1)
        for (double y = -10; y <= 10; y += 0.1)
        {
            printf("%f %f %f¥n", x, y, sqrt(x*x + y*y));

        }
}

 

これをMeshで読み込ませた後、

 

Filters/Pointset/Compute nomals for point seets/

 

を実行。次に

 

Filters/Remeshing simpleification and Reconstruction/Surface Reconstruction : Ball Pivoting/

 

を実行してメッシュにします。最後にスムージング。

 

Filters/Smooth ,Fairing and Deformation/Laplacian Smooth/

 

あとは適当な形式で保存すればOK。

 

このままunityに取り込めばいけるかなと思ったが、どうもうまくいかない。

厚みがゼロなのが悪いのかな。

3dプリンタも視野に入れて厚みをつけとくか。

 

blenderにMeshLabから出力したファイルを読み込ませます。

 

左下のボタンでモード変更してエディットモードにします。

aキーを押すと全選択されます。Ctrl-F=>Solidifyで厚みがつきます。

左側にThicknessというウィンドウが表示されるのでここで厚みを変えれます。

あとはobjとかでエクスポートすればOK。

 

あとはunityで取り込んでdefault_MeshPart*のMeshColiderにチェックを入れればOK。テンション上がる!

副産物として3Dプリンタで任意曲面作れるようになった。

次はサイクロイド取り込む?

ジャジャガッチ | コンピュータ | 14:48 | comments(0) | trackbacks(0) |

unityおもろいな

久しぶりにゲーム作りたくなったので、かなり前から話題のunityに手を出してみた。

C#はよく知らないがきっと大丈夫。

とりあえず玉転がしのチュートリアルを飛ばし飛ばしなんとなくやってみた。

すげえ、簡単にゲーム作れそう。

ジャジャガッチ | コンピュータ | 14:07 | comments(0) | trackbacks(0) |

codingame

paizaの配信メールでcode warriorsというブラウザゲームを知った。

コーディングしてロボット同士で戦うというもので面白そうなのでやってみた。

が、あんまりコーディングする意味を感じなくて面白くなかった。チュートリアルしかやってないので先に進めば面白いのかもしれないけど。ターン制なのでコマンド選択をコードでやってるだけという感じがしたんだけど。

それで消化不良感があったのでempire of codeというゲームを試してみた。リアルタイムストラテジか?こっちのほうが面白そうな感じはしたが、やはり何か求めてるものとは違う感があってチュートリアルだけでやめてしまった。

 

次にcodingameを試してみた。ミニゲームをクリアしていく感じで面白そう。

というわけでいっこやってみた。画面は下のような感じ。

このゲームの目的は主人公を雷マークへ導くこと。

最初は次のコードが雛形として与えられている。

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 * ---
 * Hint: You can use the debug stream to print initialTX and initialTY, if Thor seems not follow your orders.
 **/
int main()
{
    int lightX; // the X position of the light of power
    int lightY; // the Y position of the light of power
    int initialTX; // Thor's starting X position
    int initialTY; // Thor's starting Y position
    cin >> lightX >> lightY >> initialTX >> initialTY; cin.ignore();

    // game loop
    while (1) {
        int remainingTurns; // The remaining amount of turns Thor can move. Do not remove this line.
        cin >> remainingTurns; cin.ignore();

        // Write an action using cout. DON'T FORGET THE "<< endl"
        // To debug: cerr << "Debug messages..." << endl;


        // A single line providing the move to be made: N NE E SE S SW W or NW
        cout << "SE" << endl;
    }
}

 

coutで移動できる仕様となっている。これを改変して目的を達成するわけだ。

動かすと主人公が実際に移動する様子が見えてうれしい。

やってることは競技プログラミングみたいなもんなんだけど、絵があると断然うれしいな。

次のコードでクリアできた。

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 * ---
 * Hint: You can use the debug stream to print initialTX and initialTY, if Thor seems not follow your orders.
 **/
int main()
{
    int lightX; // the X position of the light of power
    int lightY; // the Y position of the light of power
    int initialTX; // Thor's starting X position
    int initialTY; // Thor's starting Y position
    cin >> lightX >> lightY >> initialTX >> initialTY; cin.ignore();
    
    int tx = initialTX;
    int ty = initialTY;
    // game loop
    while (1) {
        int remainingTurns; // The remaining amount of turns Thor can move. Do not remove this line.
        cin >> remainingTurns; cin.ignore();

        // Write an action using cout. DON'T FORGET THE "<< endl"
        // To debug: cerr << "Debug messages..." << endl;


        // A single line providing the move to be made: N NE E SE S SW W or NW
        //cout << "SE" << endl;
        if(lightY-ty > 0)
        {
            cout << "S";
            ty++;
        }
        else if(lightY!=ty)
        {
            cout <<  "N";
            ty--;
        }
        if(lightX-tx > 0)
        {
            cout << "E" << endl;
            tx++;
        }
        else if(lightX!=tx)
        {
            cout <<  "W" << endl;
            tx--;
        }
        else
        {
            cout << endl;
        }
        
    }
}

ジャジャガッチ | C/C++ | 23:19 | comments(0) | trackbacks(0) |

数学定数の分数表現探してみた

355/113的なやつ探してみた。

https://jajagacchi.github.io/pi2/pi.html

ジャジャガッチ | 数学 | 23:39 | comments(0) | trackbacks(0) |
1/56PAGES | >> |

12
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH