畳みこみニューラルネットを0から実装する (第2回)

Tatsuya Yatagawa
2022年1月に加筆を行って記事を書き直しました! こんにちはtatsyです。 畳みこみニューラルネットを0から実装する記事の第2回です。前回の第1回ではMNISTから画像とラベルのデータを読み込みました。第1回の記事のご確認は以下のリンクからお願いします。 畳みこみニューラルネットを0から実装する (第1回) 第2回の記事の内容 第2回となる今回はシグモイド関数を使った通常のニューラルネットを対象に、学習パ ...

GCCにおけるalignasのエラー

Tatsuya Yatagawa
こんにちはtatsyです。 最近C++11/14の機能を多用している私ですが、C++0xからの新機能であるalignasについて、少し躓いた点があるので、使用法と注意点をまとめておきたいと思います。 C++におけるアラインメント C++でのアラインメントとは、データをメモリ上に置く際に、ある区切りのいい数字の倍数から始まる場所にデータを置いてくださいという意味の数字です。 例えばSIMDの拡張命令を使おう ...

Travis CIにおけるDockerが見つからないエラー

Tatsuya Yatagawa
2016年はじめごろから、Travis CI上でDockerが見つからないというエラーが出ていたみたいです。修正方法を備忘録的に書いておきます。 今までは、Dockerを使用するために、.travis.ymlは次のように書いておけばOKでした。 sudo: required service: - docker ところが、2016年のはじめごろから、これだとdocker: service not foundというエラーがでるようになっていました。 Travis CIのGitHub上にもissue ...

畳みこみニューラルネットを0から実装する (第1回)

Tatsuya Yatagawa
2022年1月に加筆を行って記事を書き直しました! こんにちはtatsyです。 今、いろいろな分野でディープ・ラーニング(Deep Learning)が大流行しています。 最近ではディープ・ラーニングを使うだけなら、Theanoであったり、Caffeであったりといったライブラリなどが充実しており、0からこれを実装する必要性は薄いです (2015年当時、2022年にはどちらも使われておらず、TensorFlo ...

Boost.PythonおよびBoost.NumpyをWindowsで使うまで

Tatsuya Yatagawa
こんにちはtatsyです。 C++とPythonを糊付けするものとしてBoost.PythonとBoost.Numpyというものがあるのですが、多くの記事はPythonからC++のコードを呼び出すことを主眼としていて、僕のようにC++からNumpyの線形ソルバーを呼びたいとか言う人は少ないみたいです。 Boost.PythonやBoost.Numpyを使う利点、特にWindows上で使う利点はPyth ...

Travis CIからGitHub Releasesへの自動デプロイ

Tatsuya Yatagawa
こんにちはtatsyです。 相変わらず、テスト環境に凝っている今日この頃です。 今日は意外と解説しているページがなかったので、Travis CIからGitHubのReleasesへ自動でデプロイする方法についてまとめてみたいと思います。 手順は、 GitHubでTravisからのPushおよびDeployを許可 Travis CI用のトークンの暗号化 デプロイのための.travis.ymlの書き方 となっております。順にご説 ...

KUPC 2015のチラ裏的解説

Tatsuya Yatagawa
こんにちはtatsyです。 今回は先日行われたKUPCをチラ裏的に解説したいと思います。僕はAからFまでしかできてないので、できているとこまでです。 たぶん、そのうち公式の解説がでるので、完全に自己満です。許してください。 A. 東京都 問題 アルファベットの小文字だけから成る文章が与えられるので、それを適当に切り分けて、tokyoあるいはkyotoが入っている断片を作る。作れる断片の最大数はいくつかを答えよ。 ...

C++11の非静的メンバ変数初期化

Tatsuya Yatagawa
こんにちは、tatsyです。 最近はすっかりC++11/14のすごさにやられています。 というわけで今回はC++11から追加されたクラスの非静的メンバ変数初期化について実験をしてみました。 非静的メンバ変数の初期化とは? C++以外の言語、例えばJavaなどをやったことがある人なら、次のようなコードになじみがあると思います。 // A.java public class A { public int val = 1; public A() { } void print() { System.out.println(this.val); } } 注目していただきたいのは3行目です。3行 ...

インスタンスを返す関数におけるmoveの注意点

Tatsuya Yatagawa
こんにちはtatsyです。 最近Effective Modern C++を読んでいたのですが、読んでいて気づいた、言われれば当たり前だけど、意外とやってしまうmoveの注意点についてご紹介したいと思います。 Effective Modern C++ (外部ページに飛びます) おそらく、moveの最もよく使われるであろう使用場面はfactoryメソッドなどにおいてインスタンスをreturnするときだと思います。 例えば、次のように何らかのサイズを引数に取る ...

実際に使うDocker超入門 (第2回)

Tatsuya Yatagawa
こんにちはtatsyです。 今回は「実際に使うDocker超入門」の第2回です。今回は自前のDockerfileを作成し、Docker Hubにpush、そしてTravis CIでDockerを使ったテストを行う方法を紹介したいと思います。 前回の記事はコチラからご覧になれます。 自前のDockerfileを作る では、前回ご紹介した内容を踏まえて自前のDockerfileを作って見たいと思います。 私が今回作 ...