サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
qiita.com/mokemokechicken
はじめに GitHub ActionsでDockerのコンテナをBuildするとデフォルトだとLayerのCache?がされないため、毎回Dockerfileの先頭から実行することになります(何も工夫をしないと)。 「LocalでBuildするときは(Cacheが効いて)速いんだけど、GitHub Actionsだと遅い」というのは、Buildに時間がかかる場合結構しんどいです(Twitterなどが捗ってしまう)。 色々方法があるようですが、Dockerのマルチステージビルドを使っていないなら、割と簡単にCacheを効かせられるようなので、そのメモです(主に自分用)。 ポイントは docker buildコマンドの --cache-from と --build-arg BUILDKIT_INLINE_CACHE=1 になります。また、このOptionを指定するには、BuildKitを有効に
はじめに 前回はGraphNetを使って「とにかく5を出力する」ように学習しました。今回は、ノードやエッジの値を足し算する学習をしてみようと思います。 環境などは前回と同じです。 import numpy as np import sonnet as snt import graph_nets as gn import tensorflow as tf import matplotlib.pyplot as plt from pprint import pprint %matplotlib inline tf.reset_default_graph() def create_data_dict(n0=0., n1=0., e0=0., e1=0.): data_dict = dict( nodes=[[n0], [n1], [0.]], # node attrs (n0, n1, n2)
はじめに GraphNets というライブラリが DeepMind からリリースされています。 このライブラリは この論文 の実装として公開されたもので、 端的に言うと 「ノード、エッジ、Globalに任意の属性(≒任意のtensor)を持ったグラフを入力にし、 構造は同じだが属性が更新されたグラフ を出力する」 というネットワークブロックを提供するものです。 何が面白そうかというと、グラフという知識表現として非常に表現力の高いデータ構造を扱うことができるということです。 以前から、グラフ畳み込みニューラルネットワークというものが(やや)注目されていましたが、それの汎用的なデータフォーマットを定めて、扱いやすくしてくれたような位置づけだと思います。 とはいうものの、現状ほとんどドキュメントも無く、デモのソースコードを見ても中々使い方がわかりません。 試行錯誤の末、なんとか GraphNet
はじめに タイトルの通り、Pythonの機械学習プロジェクトにおけるプログラミング設計について、 最近私が意識していることを書いてみたいと思います。 この内容が役に立つかもしれない人は、機械学習のプログラミングをする人で、 あまりPythonを書いたことが無い 仕事でプログラミングしたことがあまりない いつもプログラムの構成で悩んで、スッキリ書けないことが多い という人です。 設計方針 設計は「何に備えるか」を考える事に近いと思います。 通常私が機械学習プロジェクトで意識しているのは以下のような点です。 設定により振る舞いを簡単に変えることができる 例えば、「前処理の方法」「Modelのレイヤー数」「学習するEpoch数」のような局所的な振る舞いから、 開発環境 or Staging環境 or Production環境毎に異なる「データソースの場所」や「認証情報などの機密データ」の指定、
はじめに AlphaGo Zeroは、囲碁AIをゼロから強化学習で鍛え上げたもので、それまで最強だったAlphaGo Masterを打ち破るという偉業を成し遂げました。そしてこのZeroの手法自体は結構シンプル、かつ、強くなれるという美味しいところ取りな手法なのです。また、そのゲームの知識を知らなくても実装できます。 今回は手法の理解と検証のため、リバーシのAIを育てているので共有します。 システム概要 ソースコード: https://github.com/mokemokechicken/reversi-alpha-zero 動作環境 確認済みなのは以下の環境です。 Python 3.6.3 tensorflow-gpu: 1.3.0 tensorflow==1.3.0 でも動きますが、非常に遅いです。play_guiの時は tensorflow(cpu) でもまあ問題ない感じで動きます。
はじめに 「100人を部屋に集めてお金をランダムな相手に渡し続ける」とだんだんと貧富の差が生まれる というGigazineの記事があります。 「そりゃあ、まあそうだろ」「おお、驚いた」と色々な感想があると思いますが、簡単な実験なので色々条件を変えてやってみると、意外と面白かったので紹介します。 100人だと少ない気がしたので1000人でやってみます。 1000人が初期に金1000を持って、各ターンで無作為に誰かに金1を渡す場合 それぞれ、10, 100, 1000, 10000ターン目の所持金額とその人数のヒストグラムは以下のようになりました。 基本的に、1000を中心とした正規分布っぽい感じですね。試行を繰り返すと裾野が広がっていくのがわかります。 1000人が初期に金1000を持って、各ターンで無作為に渡すが 自分より金持ちに渡す時は10%の確率で再度誰に渡すか考え直す 場合 自分より
はじめに BigQueryを使っていて、しばしば書き方を忘れたりするものをメモしておきます。 内容 日付・時間関連 unixtimestamp と TIMESTAMP型 の変換 TIMESTAMP型は「時刻」的なデータなので unixtimestamp と普通に対応します。 unixtime -> TIMESTAMP: TIMESTAMP_SECONDS(unixtime) TIMESTAMP -> unixtime: UNIX_SECONDS(TIMESTAMP "2016-11-18 00:00:00+09") 文字列からTIMESTAMP型には普通にCASTできる。TimeZoneは省略すると+00になります。 SELECT TIMESTAMP "2016-11-18 00:00:00" as utc, TIMESTAMP "2016-11-18 00:00:00+09" as js
はじめに KerasでネットワークのWeightを固定させて、別のLayerのみ学習したいということはしばしばあります。その時に何を気をつけたら良いかを調べたメモです。 Versions Python 3.5.2 Keras 2.0.2 検証 下記のようなModelを考えます。 ここのNormalContainer の部分のWeightを「更新したい」ときと、「更新したくない」ときがあるとします。 直感的には Container#trainable というPropertyにFalseを設定すれば良さそうですが、それでちゃんと意図通り動くのかやってみます。 コード # coding: utf8 import numpy as np from keras.engine.topology import Input, Container from keras.engine.training imp
はじめに ※ Keras2 を対象にしています。 Kerasのコードはシンプルでモジュール性が高いのでシンプルに記述可能で、理解しやすく使いやすいです。 ただし、標準で用意されている以外のLayerや学習をさせようとすると、あまりサンプルがなくてどう書いていいかわからなくなることが多いです。 最近いくつか変わったModelを書いた時に学んだTipsを備忘録も兼ねて共有します。 目次 Functional APIを使おう Weightを共有したい場合は Container を使うと便利 「LayerのOutput」と「生のTensor」は似て非なるもの Lambdaを使った簡易変換は便利 カスタムなLoss FunctionはSample別にLossを返す LayerじゃないところからLoss関数に式を追加したい場合 学習時にパラメータを更新しつつLossに反映した場合
思うこと チーム数は 18 である 1stステージは 各チーム同士が1回だけ対戦するので試合数は 153(=18*17/2) サッカーではホーム&アウェイという程だし、対戦における地元と敵地の違いがありそう 試合結果が生まれるメカニズムを考える 試合結果(スコア)がどのように生じるかを以下のように仮定してみます。 各チームは 攻撃力 防御力 ホーム力 というのがあるとする。 攻撃力が高いほど得点が多く、防御力が高いほど失点が少ない ホームゲームにおいては、攻撃力、防御力ともにアドバンテージが付与される(=ホーム力) とします。まあ、ここまではそんなにおかしな話ではなさそうです。 次に、統計の世界に入って考えてみます。 まず「得点」はポアソン分布に従うと適当に仮定します。 つまり、 あるチームのある試合の得点 ~ Poisson(そのチームの攻撃力 - 対戦チームの防御力) という感じです。
はじめに コマンドライン起動系のPythonのプロジェクトを定期実行やサービス化して様々な環境で安定して実行させたい場合、やはりDocker化するという選択肢があります。最近、私なりにその方法が固まってきたので共有します。 今回 コマンドライン起動系と書いているのは「Web系」の場合は少し違うかもな、と思ったからです。Pythonは 自分で使いたいVersionと OSに含まれるバージョンが競合したり、ライブラリのInstallが結構大変だったりするので(pipあまり賢くない...)、Docker化してリリースするのはかなり有効に思えます。 個人的要求 git にpushしたりすることなくコンテナ化したい コンテナ化にかかる時間は最小限にしたい 環境情報や鍵情報は実行時に指定したい Version Docker for Mac: Version 1.13.0-rc4-beta34.1 (1
はじめに バグなのだと思うのですが(仕様としてはおかしいと思うので)、Dockerfileを書いていて、ADDとchownやchmodの順序によって意図しない挙動になることがあるので共有します。 動作Version docker Docker version 0.8.0, build cc3a8c8d8ec57e15b7b7316797132d770408ab1a docker host os (Mac) boot2docker: 0.5.4 現象 例えば、centosユーザ、の .ssh ディレクトリに authorized_keys を置いて、Permissionなどを設定したいということがあります。 その場合少なくとも下記の条件を満たす必要があります。 ~/.ssh DIR は mode 700 でなくてはならない ~/.ssh DIR 以下の Owner は centosユーザでな
はじめに PHPのComposerでGit上のライブラリを使いたい時のメモです。 下記を見ればわかる https://getcomposer.org/doc/05-repositories.md#vcs のですが、Composer初心者には当たり前のお約束もわからなかったので残しておきます。 今回やりたかったこと 「とあるPHPのComposerライブラリ」をForkして今後ややカスタマイズしつつ使いたい なので、Github上でForkしてそれをcomposer経由で取ってきたい どうしたか こう書けばOKだった { "repositories": [ { "type": "vcs", "url": "https://github.com/yumemi/oauth2-server-php" } ], "require": { "bshaffer/oauth2-server-php": "
はじめに ベイズ最適化(参考:ベイズ最適化入門, 機械学習のためのベイズ最適化入門)を使うと、機械学習の時の各種Try&Errorで決めざるを得ないようなハイパーパラメータの探索を効率よく実施できる可能性があります。 考え方などは最近色々解説記事が増えてきたおかげで理解はできるのですが、GridSearchのライブラリみたいな形ではWeb上で見つけられなかったので、今回作りました。きっと車輪の再発明なのだと思うのですが、まあ再発明は勉強にはなるので良しとします。 今回使っている各種Version Python3.5 numpy==1.11.1 scikit-learn==0.17.1 コード from itertools import product from sklearn.gaussian_process import GaussianProcess # The MIT License
BigQuery上のユーザID入りアクセスログからセッション分割したり、ユーザ別・セッション別の情報を抽出する入れ子構造のテーブルを作成する方法メモBigQuery はじめに BigQuery上にユーザID付きのアクセスログ的なデータを格納しているときに「30分以上アクセスがなければ別セッションとみなす」というようなルールでセッション分割したり、Google Analyticsっぽくセッション内のアクセス数や滞在時間などを計算したいということがあると思います。 そのような計算をBigQuery上だけで行う方法のメモです。 アクセスログデータの構造 アクセスログデータには以下の項目を含むとします。 user_id ユーザID(数値でも文字列でもOK) unixtime unixtimestamp(1970/1/1からの秒数)とします。 BigQuery上のTimestamp型でも同じようにで
はじめに Docker内でちょっとSyslogを残しておきたい、ということはなきにしもあらずかと思います。 (たくさんDaemonを動かすのは良くないとされつつも・・・) Fedora21などで yum でInstallされるデフォルトの rsyslog.conf だとログが出力されないので、その対策メモです。 症状 rsyslog自体はInstallされていて起動しているのに logger などで /var/log/messages に表示されない。 具体的には、 logger hogehoge としても /var/log/messages にログが出ません。 http://www.projectatomic.io/blog/2014/09/running-syslog-within-a-docker-container/ に書いてある方法で上手く行きました。 RHEL7やFedoraで
はじめに 最近良くJupyter notebook(Python3)のお世話になっていて、 いくつか小技が増えたので投稿します。 環境 Jupyter Notebook 4.2.x Python 3.5.x ※ 例えば、https://github.com/mokemokechicken/jupyter-tensorflow のDocker上のJupyter環境で使えます。 小技たち sklearnの決定木の結果を図に変換してinlineで表示する sklearn.tree.tree.DecisionTreeClassifier などの決定木のは .dot形式出力はできるものの、それを notebook上に表示しようとすると結構厄介です。 しかし、一定の準備と手続きをすればその辺を簡単にできるようになります。 必要なもの OS上にgraphvizをインストールしておいて dot に環境変数
はじめに gradle の Android Pluginには色々便利な機能があります。 「ビルドバリアント」を使ってソースセット(java, res, assets)などを切り替えるのは特に使いどころがあると思うので共有します。 Version Android Studio 1.1.0 Gradle Android Plugin 1.1.0 ビルドバリアント ビルドバリアントは andoird pluginの機能で、詳細はここにあります。 http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants そして、Android Studioもサポートしていて、GUIでどのビルドバリアントを編集するかをスイッチすることができるのがかなり画期的です。 そして このQiitaの記事 Android
はじめに ここにもちょっと書いたのですが、NPI(Neural Programmer-Interpreters) という仕組みがあります。NPIはDeepLearningで「プログラムの実行」を学習させようという試みです。「プログラムの実行」方法を人間がプログラム言語で組み立てるのではなく、「プログラムの実行」をNPIが事例をみて学習するというのが醍醐味かなと思います。 論文中では、「足し算の筆算」「数値のソート」「車の画像を正面に向ける操作」を一つのNPIで実装したということなので、今回はまず「足し算の筆算」を概ね論文の通りに実装することを目指します。 NPIの仕組みの簡単な説明 各モジュール NPIの内部構造を上記の図を使って簡単に説明します。 環境情報: 問題のドメインに特化した環境情報を表す部分。「足し算」の問題なら「ポインタが指し示す位置の文字たち」なるし、「車の画像を・・・」の
はじめに 最近勉強のため http://arxiv.org/ に投稿される論文を読むようにしています。 しかし、ただ読んだだけだと内容とか何を読んだかすら忘れてしまうので、アウトプットを残すという意味でメモします。 ※ 間違った理解をしている可能性があるので、このメモを読むときはご注意ください。 読んだもの A Neural Conversational Model 概要 seq2seqを使って会話するModelを作ってみた話。 いろいろな分野の会話を単にseq2seqで学習させたけど、わりと良い感じだったみたいです。 例えば、ITに関するHelpdeskで、以下の様な会話になったそうです。他にもいくつか会話例が載っています。 (論文より引用) ★ Conversation 1: VPN issues. Machine: hi Human: hello Machine: could you
はじめに 最近、サーバ上での作業の他にも、 JenkinsやDockerなどでもShellスクリプトを書いたりする機会が増えてきていると思います。 社内の人と話していても意外と知られてないけど便利な小技をまとめてみました。
はじめに ちょっとデータ分析や機械学習をやってみたい、んだけど環境準備が少し面倒だとか、 ハンズオンとかやるんだけど環境セットアップの説明だけで結構時間を使ってしまう、ということがなきにしもあらずかと思います。 Jupyter Notebookは機能的にも素晴らしい環境ですし、Webブラウザがあれば使うことができます。そういう環境はDockerに入れておくと便利で、各自のLocalで起動して使うか、クラウドサーバで起動しておけば、Webブラウザがあれば誰でも使えるのでお手軽です。 既に公開されているDocker Containerもあるのですが、いくつか欲しいものが足りないので追加したものを作ったので共有します。 Jupyter Notebook Docker Container Dockerファイルはここにあります。 https://github.com/mokemokechicken/
はじめに LSTM(Long Short Term Memory) は時系列データの学習によく用いられているものです。 わかるLSTM ~ 最近の動向と共にの記事がとても詳細に説明されています。 上記でも解説されていますが、LSTMは例えば「今までの単語列を入力として、もっともらしい次の単語を予測する」というような「文章の生成」に使うことができます。 このLSTMを使って、例えば、Webサービスにアクセスする 「ユーザの行動」を「単語」 とみなせば 「ユーザの一連の行動」は「文章」 とみなせるわけで、 「こういう行動を取ってきた人は、次にこういう行動を行う」という予測モデルが作れないかと考えました。 この予測モデルが作れれば、あとは文章生成のような形で 行動生成 ができます。つまり、ある種の ユーザ行動のシミュレーション ができることになります。 ユーザがある程度アクセスすれば、 このまま
はじめに 以前 足し算ゲームを強化学習で学習できるか? を試してみて、問題なく学習ができました。 今回はもう少し現実的な問題を想定してみようと思います。 Webサイトに来るユーザに対して、Webサイト運営者が「あるアクション(メール?クーポン?など)」を起こすと、望ましい行動(そのユーザが何か購入するなど)を取る、とします その時、どのユーザにどのタイミングでどのアクションを取ればいいか、を知りたい という問題があります。 まあ、メールぐらいなら全員に送れば良いじゃん的な話はありますが、送りすぎると離脱に繋がりますし、クーポンはコストもかかるのであまり乱発したくはないです。 この問題を Q-Learning的な枠組みでやったらどうなるのだろうか、というのが今回のお題です。 Q-Learningだと、アクションが複数になっても対応できるのが良い所です。 といっても、簡単な完全に仮想的なシチュ
はじめに TensorFlowを試す時間ができたので、いろいろ試してみたいと思っています。 サンプルデータが付属していたり、本家のチュートリアルが非常に充実しているので、本当にすぐ試すことができて凄いですね。 今回は、MNISTのデータを使ってAutoEncoderをやってみようと思います。 AutoEncoderに関する情報は既にたくさんありますが、例えば http://vaaaaaanquish.hatenablog.com/entry/2013/12/03/033850 の解説はわかりやすいと思います。 今回はAutoEncoderのアルゴリズム的な追求というより、TensorFlowを使い慣れることを目的としているので、あまり細かいことは気にしてないです(活性化関数とかノイズ入れるとか)。 Version Mac OS: 10.11.1 python 2.7.9 matplotli
はじめに 強化学習という分野を初めて認識したので、簡単なお題を強化学習で対応できるかをやってみることにします。 DQNの生い立ち + Deep Q-NetworkをChainerで書いた : きっかけになった記事 強化学習: ε-Greedy法 について参考にしました 今回のは ChainerとかDeepLearningは関係ない話です。 お題: 足し算ゲーム ゲームの基本は足し算です(?)よね。 状態S: 0~9 の整数 アクションA: 1~4の整数 次状態S': (S + A) % 10 報酬R: +1: S' == 7 -100: S' in (5, 9) というゲームを考えます。 要するにプレイヤーには 0〜9の数字が提示され、それについて 1〜4 の数字で答える(A)というものです。 そして次の状態が 7 になれば 1点もらえて、 5か9になると -100点されます。この「報酬」
はじめに Chainerで機械学習と戯れる: Treasureゲームの強化学習を50日程続けた経過メモ から 更に60日以上経過しました。 賢い学習モデルでなくてもそれなりに目的は達成できるのか、というところに興味があるところです。 TreasureGameの現状 現在のハイスコア時の動きを動画にキャプチャしました。 https://youtu.be/iyBHR1gzumA ハイスコア更新にかかる時間 前回の記録を見ると、 「27万回」「107万回」「192万回」「207万回」「269万回」「297万回」「371万回」 でスコア更新していたようです。今回のを見ると 「549万回」「558万回」「1057万回」「1308万回」 でスコアを更新していたようです。 遂に1000万回突破してました。感慨深い。。 新しい動き 「549万回」目(0:43~)のときに、 敵をぐるっと一周するような動きを
JAWS FrameworkでWebブラウザからS3にファイルをアップロードして、有効期限付きのダウンロード付きURLとパスワードを生成するサービスを作ってみた、時の開発メモAWSlambdaJAWSAPIGatewayserverless はじめに JAWS Frameworkを使ってお手軽にLambda+API GatewayでHelloWorldするメモ で、 とりあえず感触は掴めたので、実際にちょっとしたWebServiceを作ってみました。 前提として、上記記事の手順は経ているものとして、 JAWSを使ったサービス開発の時のハマリポイントや悩んだことのメモを共有します。 作ったWebServiceの概要 機能 ファイルをWebブラウザからS3へUpload (Downloadパスワードと有効期限を指定) Upload Keyというのが別途必要で、 期限付きUpload Key を
はじめに Swiftで普通にObserverパターンを作ろうとすると意外に面倒じゃないでしょうか。 KVOは何かやりたいことと違うし、NSNotificationCenterはTypeSafeじゃないし、通知名の文字列を管理するのも少し面倒です。 その点AndroidのEventBusは少し動的な要素が入りますが(Methodが使われていないとWarningが出るのを抑えないといけない)、なかなかバランスが良いと感じていて好きです。 Swiftでも同じ感じで作れないかなぁと試行錯誤していたら、まあまあ良い感じで作れたのでご紹介します。 SwiftEventBusという名前のpodが既にあったので、 EventCenter と名づけました。 EventCenterの良い所 任意のObject(class/struct/enum等)をEventオブジェクトとしてpostできる Event通知を
次のページ
このページを最初にブックマークしてみませんか?
『@mokemokechickenのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く