edo1z blog

プログラミングなどに関するブログです

2017-01-01から1ヶ月間の記事一覧

Python3 - ヒープをnetworkxではなくgraphvizで書いてみる

networkxだときれいに表示できない。posに表示スタイルを設定するようですが、spring_layout、spectral_layout、shell_layoutとかありますが、全部キレイな木を表示してくれる感じじゃない。外部のdotファイルとかいうのを読み込むとできるようですが、graph…

Python3 - ヒープ

ヒープはノードに常に子供が2個あって、子供より親は小さい値を持ちます。ヒープは配列で表せます。配列の0番目は一番上の根ノードです。あとは、k番目のノードの子供は、左が2k+1、右が2k+2番目になります。挿入は最後に挿入して、親ノードと比較して必要に…

Python3 - グラフ・探索

参考:http://www.geocities.jp/m_Hiroi/light/pyalgo05.html グラフをプログラムする場合、よく使われる方法に「隣接行列」と「隣接リスト」があります。隣接行列は 2 次元配列で頂点の連結を表す方法です。頂点が N 個ある場合、隣接行列は N 行 N 列の行…

Python3 - NetworkXでグラフを表示する

https://networkx.github.io/ インストール https://github.com/networkx/networkx/ $ pip install networkx $ pip install decorator Decoratorというのも必要っぽい。両方ともすでに入ってた。 サンプルコード import networkx as nx G=nx.Graph() G.add_n…

Python3 - アルゴリズム(累乗)・計算量

累乗 pow0は遅いやつ。計算量はループをn回回すので、O(n)という。pow1は速いやつ。計算量はO(log n)らしい。 def pow0(x, n): value = 1 for i in range(n): value *= x return value def pow1(x, n): if n == 0: return 1 value = pow1(x, int(n / 2)) val…

ベルマン方程式

ベルマン方程式は、動的計画法(動的な最適化問題)の最適性の必要条件を表す方程式らしい。必要条件は、再帰を使って部分を解くことで全体が解ける状態にあることと、メモ化を使うことです。最適化問題とは、集合内のすべての数値を、ある関数にいれたとき…

強化学習の勉強に良さそうなサイト一覧

OpenAI Gym Pythonではじめる強化学習 深層強化学習:ピクセルから『ポン』 – 前編 深層強化学習:ピクセルから『ポン』 – 後編 超シンプルにTensorFlowでDQN (Deep Q Network) を実装してみる 〜解説編② 学習の流れを理解する〜 PyBrainを用いて強化学習を…

Python3 - 動的計画法(フィボナッチ数列)

動的計画法は、分割統治法とメモ化を合わせた方法のことらしい。分割統治法は、問題を細分化して、細かい部分を順に解いていくことで全体を解明するようなことの総称らしい。 分割統治法は、コード的には下記のようになり、再帰することになる。 function co…

確率の記号

条件付き確率 P(B|A)≡PA(B) Aが与えられたときのBの確率 P(A,B)≡P(A∩B) AとBの同時確率

期待値

確率論において、期待値(expected value)は、確率変数の実現値を, 確率の重みで平均した値である。 サイコロの期待値 p = 1 / 6 ev = 1 * p + 2 * p + 3 * p + 4 * p + 5 * p + 6 * p print(ev) 3.5

greedyアルゴリズム(貪欲法)

greedyアルゴリズムは、全部をN回試して、報酬の平均が最も高いやつを選択するというアルゴリズムです。 当たりか外れがでる機械が4個あって、どれが一番当たり率が高いか分からないのでgreedyアルゴリズムでやってみる想定にします。機械はa~dまであってそ…

Python3 - random

randomを試してみます。 下記をやってみます。100回randintを0~100まででやってみます。 import numpy as np import random import matplotlib.pyplot as plt arr = np.zeros([100]) for _ in range(100): a = random.randint(1, 100) arr[a - 1] += 1 x = …

手書き文字を作れるJavascriptをつくってTensorFlowで予測させてみた(2)

この前、「手書き文字を作れるJavascriptをつくってTensorFlowで予測させてみた」という投稿でブラウザ上で手書きした文字画像を、MNISTで訓練したモデルで予測してみましたが、ものすごく精度が悪かったです。今回改めて、CNNを使ってやってみたらかなり精…

TensorFlow - Local Response Normalization(LRN)(局所的応答正規化)

参考:theanoで局所コントラスト正規化(Local Contrast Normalization)を使う 正規化の方法にはいろいろあり、代表的なものを挙げると Global Contrast Normalization(GCN) Local Contrast Normalization(LCN) Local Response Normalization(LRN) ZCA whiten…

Python3 - NumpyとPythonの配列のスライスでマイナス使った場合

開始位置より終了位置が小さい場合は空。 マイナスの場合、後ろから数える。一番最後が-1。 終了位置が実際の配列の最後より大きい場合は、実際の配列の最後になる。 開始位置は0だったら0番目も含まれるが、終了位置が例えば10だった場合、9番目までが含ま…

TensorFlow - tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None) value: A 4-D Tensor with shape [batch, height, width, channels] and type tf.float32. ksize: A list of ints that has length >= 4. The size of the window for each …

TensorFlow - weight decay

機械学習のweight decayは、重みの2乗ノルム(L2ノルム)を損失関数に加えること。これによって重みが大きいと損失関数の値が大きくなるので、重みが大きくなりすぎないようになる。過学習は重みが大きくなることで発生することが多いからこういうことする。…

TensorFlow - tf.add_to_collection

tf.add_to_collection(name, value)は、tf.Graph.add_to_collection(name, value)のラッパーだそうです。 引数 name: The key for the collection. The GraphKeys class contains many standard names for collections. value: The value to add to the coll…

TensorFlow - tf.train.MonitoredTrainingSession

tf.train.MonitoredTrainingSessionを確認します。 訓練をモニターするのに特化したセッションという感じでしょうか?チュートリアルのコードでは下記のような使われ方をしています。 with tf.train.MonitoredTrainingSession( checkpoint_dir=FLAGS.train_d…

Android Instant Apps

GoogleのAndroid Instant Appsの紹介ページ 開発者向けのInstant Appsに対応するための注意事項 通常のアプリをちょっと修正して、Instant Appsに対応するようにすればいいらしい。小さいアプリなら1日で対応できるレベルらしい。 SDKはまだ出てないらしい。

TensorFlow - Readerクラスでバッチ処理

参考: TensorFlow : How To : データを読む Inputs and Readers TensorFlowチュートリアル - 畳み込みニューラルネットワーク(翻訳) tf.train.shuffle_batchというのを使う。シャッフルが不要な時は、tf.train.batchを使う。 tf.train.shuffle_batch tf.t…

TensorFlow - 学習精度を上げるために画像加工して増やす

参考:Images 上記を見ると色々な加工関数があるんですね。デコードエンコードも色々便利そうなのがあるんですね。 TensorFlowのチュートリアル「Convolutional Neural Networks」で、cifar10の画像を学習精度を上げるために画像を色々加工して増やしていま…

TensorFlow - 画像ファイルをReaderクラスで読み込む

参考:TensorFlowのReaderクラスを使ってみる こんな風にしたら単一ファイルを読み込めるらしい。 jpeg_r = tf.read_file(fname) image = tf.image.decode_jpeg(jpeg_r, channels=3) コード import tensorflow as tf import numpy as np from PIL import Ima…

TensorFlow - Readerクラスでデータを読み込んでみる

参考:TensorFlow : How To : データを読む ファイルからデータを読む場合の処理の流れ ・ファイルパスのリストを、tf.train.string_input_producer 関数に渡す(shuffle=Trueにしたらepochでファイル名をシャッフルする) ・読み込むデータに合わせてreader…

TensorFlow - tf.strided_slice関数を調べる

tf.strided_sliceを調べます。TensorFlowのGithubにのってる説明ページはこれです。 tf.strided_slice(input_, begin, end, strides=None, begin_mask=0, end_mask=0, ellipsis_mask=0, new_axis_mask=0, shrink_axis_mask=0, var=None, name=None) {#stride…

Python3 - cifar10をダウンロードして画像を表示させてみる

参考: Convolutional Neural Networks https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10/ 上記githubに実際のコードがあります。 Cifar10というのは、10種類のカラー画像が沢山入ってるやつで、機械学習によく使われるようです。…

Python3 - PIL.Imageで画像を合体してテキストを書く

コードサンプル from PIL import Image, ImageDraw a = Image.open('img/seven.jpeg') #28 x 28 b = Image.open('img/cifar1.png') #32 x 32 b = b.resize((28, 28)) a_txt = 'seven' b_txt = 'cifar10' new = Image.new('RGB', (160, 100), (230, 230, 230)…

Numpy - 配列の形を変えるテスト

TensorFlowでは頻繁に配列の形を変換しますが、結構混乱して理解するのに時間がかかります。Numpy.reshapeとかNumpy.transposeの動きをシンプルな配列で確認してみます。 これから操作する配列は、下記のようなCifar10の画像データの構造をイメージしてます…

Python3 - Clint (コマンドライン入出力を色々できるモジュール)

面白そうだからやってみる。 参考:https://github.com/kennethreitz/clint/tree/master/examples 参考:PythonのコマンドラインツールClintを試す インストール $ pip install clint 文字に色つける print(colored.blue('hoge')) コードサンプル from clint…

Python3 - ファイルのダウンロード

urllib.request.urlretrieveを使うとできます。本家の説明ページはここです。なんか廃止されるかもしれないとか書いてあるけど。他にはRequestsパッケージを使う方法もあります。 urllib.request.urlretrieveを使う 圧縮ファイルをダウンロードして展開する …