機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

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

TheanoでDenoising Autoencoder

今回は下記のdocumantationを整理して、Autoencoder(自己符号化器)を理解する。Denoising Autoencoders (dA) — DeepLearning 0.1 documentation下記のまとめが分かりやすかった。sinhrks.hatenablog.com aidiary.hatenablog.com文献としては下記を参考とし…

TheanoでLSTM③

前回の続き kento1109.hatenablog.com前回は、lstm_layerの内容を見てきた。 このように呼んでいたので、 proj = lstm_layer(tparams, emb, options, prefix=options['encoder'], mask=mask) projには、lstm_layerの戻り値のhがセットされる。 ※hは文字の長…

TheanoでLSTM②

前回の続き kento1109.hatenablog.com今回はLSTM層の構築から見ていく。 lstm_layer nsteps = state_below.shape[0] if state_below.ndim == 3: n_samples = state_below.shape[1] else: n_samples = 1 state_belowは、emb、 つまり、nstepsは、文書の長さ ※…

numpyの行列計算(tensor×matrix)

ベクトル同士、行列×ベクトルだとイメージしやすいが、テンソル(※)×行列は頭の中でイメージするのが難しい場合がある。 ※ここでは、3階以上の階数の行列を指す結論を先に書いておくと、 3階テンソル 行列 内積 m×n×k k×p m×n×p また、 行列 3階テンソル 内…

TheanoでLSTM①

下記のdocumentationについて整理する。LSTM Networks for Sentiment Analysis — DeepLearning 0.1 documentation はじめに コードを読んでいく前に全体の概要を掴む。コードについては下記の2ファイル lstm.py : モデルの定義&訓練 imdb.py : IMDB データ…

numpyで特異値分解

特異値分解は、行列を複数の行列の積に分解する方法。こんな感じで分解。 import numpy as np X = np.array([[3,4,1] ,[7,3,2] ,[5,4,2] ,[1,2,1] ,[2,3,2]]) U, s, V = np.linalg.svd(X, full_matrices=True) print s >> [ 12.12789287 2.81497791 0.995044…

modelの保存・ロード(Keras)

一度、fitで学習させたモデル(と重み)は下記の方法で保存できる。 model_json_str = model.to_json() open('model.json', 'w').write(model_json_str) model.save_weights('weight.h5') ロードは下記の方法 from keras.models import model_from_json mode…

Kerasで早期打ち切り

Callback関数内のEarlyStoppingを使用する。マニュアルは下記 コールバック - Keras Documentation呼び方 EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto') monitor: 監視する値. min_delta: 監視する値について改善と…

学習データのシャッフル

学習データがカテゴリ順になっていて、それをランダムな順序に変更したい、 でも、X(学習データ),y(Xの各データに対応するラベル)の順序は維持したい場合の工夫。 import numpy as np X = np.array([[11, 12, 13], [22, 23, 26], [31, 33, 34], [40, 41, …

Pandasで結合

使い方のメモ df = pd.DataFrame(np.random.randn(50,2),columns = list("AB")) c1 = df[(df['A'] > 0.5)&(df['B'] > 0.5)] c2 = df[(df['A'] < 0)&(df['B'] < 0)] x = pd.concat([c1, c2], ignore_index=True) A B 0 1.471791 1.663181 1 1.484363 1.313088…

Pandasで行・列抽出

使い方のメモ。3 行目を取得 df.iloc[3] A 0.168538 B 1.550001 C 1.002619 D 0.518160 Name: 2013-01-04 00:00:00, dtype: float64 1,2,4 行目と 0-2 列目を取得 df.iloc[[1,2,4],[0,2]] A C 2013-01-02 0.496579 0.745850 2013-01-03 -0.220238 0.405202 2…

TheanoでRNN②

RNNの続きkento1109.hatenablog.com前回で、elman.pyの__init__部をまとめた。 今回は、elman-forward.pyのRNNインスタンス生成後のコードを呼んでいく。前回の内容で rnn = model(nh = s['nhidden'], nc = nclasses, ne = vocsize, de = s['emb_dimension']…

TheanoでRNN①

下記のdocumentationについて整理する。Recurrent Neural Networks with Word Embeddings — DeepLearning 0.1 documentation タスクについて assigning a label to each word given a sentence. It’s a classification task. とある通り、文章の各単語のタグ…

Pandasでcsvを扱う

Pandasでcsvを扱う場合のメモ。 Read import pandas as pd df = pd.read_csv('D:\python\data\wine.data') print df # show all column test_df = pd.read_csv('test.csv', header=None, skiprows=1, names=['番号', '数学','英語']) #ヘッダがない場合はhea…

TheanoのSCANについて

SCANとは theanoにおける繰り返し処理に対応する関数。基本的な理解のために下記ページを参考にさせて頂いた。 sinhrks.hatenablog.comfnの引数は、 fn に渡す引数は (最大で) 以下の 3 つになる。それぞれ、対応する引数がない場合は省略される (fnに渡され…

Sentiment analysis (CNN)③

前回の続き kento1109.hatenablog.com前回はMLPDropoutまで確認した。 前回まででモデルの定義は説明した。 なんで、新しく層のインスタンスを生成することはない。今回は残りの部分を確認する。 define parameters パラメータを定義する。 #define paramete…

pickle(オブジェクトデータ構造を直列化・非直列化)

Python のオブジェクトを直列化・非直列化するための機能を提供。 直列化 (Serialize) ・・オブジェクトをバイト列などの表現に変換 非直列化 (Deserialize) ・・バイト列を元にオブジェクトを復元するpickle モジュールをC言語で再実装したcPickleモジュー…

matplotlibのscatter(散布図)

散布図を作るときは、scatterが便利。分類やクラスタリングを視覚化する場合、 ラベルの出力値に応じて自動で色分けしてくれる。以下のようにcにラベルを指定するだけ plt.scatter(x[:, 0], x[:, 1], c=crf.labels_) すると、こんな風に色分けしてくれる。

matplotlibの色指定

忘れがちなのでメモ。主要な色については 1 文字で指定可能b:青 (Blue) g:緑 (Green) r:赤 (Red) c:シアン (Cyan) m:マゼンタ (Magenta) y:黄 (Yellow) k:黒 (Black) w:白 (White)出力イメージ 尚、これらの情報はこちらを参考にさせて頂いた。(ほ…

gensimでLSI(潜在的意味解析)

コーパスと辞書を用いて潜在的意味解析を行う。 *文書のベクトル化(次元圧縮) 文書セットから辞書を作成する。 不用語を取り除く BoW表現に変換 from gensim import corpora dic = corpora.Dictionary(documents) dic.filter_extremes(no_below=20, no_ab…

MeCabの基本操作

形態素解析エンジン。 言語, 辞書,コーパスに依存しない汎用的な設計が基本方針。 コスト推定はコーパスから学習する。 *与えられた文章を分割できるすべてのパターンに分割し、その中で計算したコストがもっとも小さい分割結果を採用。 とりあえず解析 MeC…

gensimのコーパス操作

コーパスを作るときの操作をまとめる。 from gensim import corpora doclist = [['human', 'interface', 'computer'], ['survey', 'user', 'computer', 'system'], ['eps', 'user', 'interface'], ['system', 'human', 'system', 'eps'], ['user','time'], […

gensimのword2vecを試す。

Word2vecを使って日本語の自然言語処理で分散表現を使おうと思った場合、 Wikipediaデータの入手 データクレンジング(形態素解析できるようテキスト形式に変換) Mecabなどを使って形態素解析 Word2vecで学習 事前にが必要。データクレンジングや学習には結…

gensimでDoc2Vec

Doc2Vecとは Doc2Vecは、任意の長さの文書をベクトル化する技術。 文書やテキストの分散表現を獲得することができる。 *ベクトル同士の類似度を測定して、文書分類や似た文書を探すことができる。Word2VecのCBoWにおける入力は、単語をone-hot表現した単語I…

TheanoでLogistic Regression(ロジスティック回帰)

下記のdocumentationの整理を行う。Classifying MNIST digits using Logistic Regression — DeepLearning 0.1 documentation LogisticRegressionインスタンスの生成 例題の入力は28×28のMNIST画像。 出力は1~10までの数値。(10クラス分類) # construct th…

TheanoでMLP(多層パーセプトロン)

下記のdocumentationについて整理する。Multilayer Perceptron — DeepLearning 0.1 documentationモデルイメージはこんなん。 MLPインスタンスの生成 まずは、MLPインスタンスを下記のように生成する。 # construct the MLP class classifier = MLP( rng=rng…

TheanoでSentiment analysis (CNN)②

前回でマックスプーリングまでの層の定義をまとめた。 kento1109.hatenablog.com 今回は、MLP層についてまとめる。 MLPDropput ここに書いたこととほとんど同じ。 kento1109.hatenablog.com 呼び出し側 classifier = MLPDropout(rng, input=layer1_input, la…

TheanoのLeNetConvPoolLayerについて

Theano(LeNetConvPoolLayer) LeNetConvPoolLayerクラスのチュートリアルはここ。 Convolutional Neural Networks (LeNet) — DeepLearning 0.1 documentation 論文の実装をするときは、このクラスを元に実装するのが正攻法だと思う。 なんで、LeNetConvPoolLa…

TheanoでSentiment analysis (CNN)①

Sentiment analysis TheanoでCNNによるSentiment analysisのコードを読む。 コードは github.com process_data.py ここは前処理。Theanoでの処理もない。 この前処理でどういうデータセットが出来るかを押さえる。cPickleで保存する変数は、revs, W, W2, wor…