電脳ヨーグルト(技術ブログ)

勉強したことを淡々とメモしていきます

Numpyの次元の追加と入れ替え

画像をnumpy配列にしたい

 

Numpyの次元の追加と入れ替え

 

次元の追加

追加したいデータが入った変数[np.newaxis, :, :]

一次元追加

x.shape(3,5)だったら

x = x[np.newaxis, :, :]を入力すると

x.shape(1,3,5)になる

 

 

 

 

入れ替え

入れ替えたいデータが入った変数.transpose(2,0,1)みたいに入力

x.shape(1,3,5)のとき、1,3,5はインデックス0,1,2にそれぞれ対応している

なのでx = x.transpose(2,0,1)を実行すると

x.shape(5,1,3)になる。

sys.argについて

sys.argとは

sys.argv[0]スクリプトファイル名

 

argvs = sys.argv  #コマンドライン引数を格納したリストの取得

argc = len(argvs) # 引数の個数

 

例えば

python example.py test.txt help abc

を実行したとき

print (argvs)

print (argc)

>>[‘example.py’,’test.txt’,’help’,’abc’]

   4

みたいな感じで出力される。

 

 

 

東大の松尾研究室が出した無償の演習コンテンツ

東大の松尾豊准教授の研究室がデータサイエンティストを目指す人に向けて、機械学習に関する講義内容を無償公開されました。

以下のホームページでファイルのダウンロードができます。

グローバル消費インテリジェンス寄附講座演習コンテンツ 公開ページ | 東京大学松尾研究室 - Matsuo Lab

 

weblab_dlb.7z というファイルがダウンロードできていると思います。

 

圧縮ファイルなので解凍します。

以下のサイトで解凍ソフトがダウンロードできます。すでにある方はそのまま解凍してください。

圧縮・解凍ソフト 7-Zip

 

次にjupyter notebookを準備します。

Anacondaを過去にインストールしたことがある方はすでに入っていると思います。

 

 

Pythonしか入っていない方はコマンドプロンプトを開き、

 

python -m pip install --upgrade pip

python -m pip install jupyter

jupyter notebook

を入力すればインストールできます。

ちなみにpython3系の方はpython3と入力してください。

 

Anacondaもpythonも入っていない方はとりあえずAnacondaをインストールすればよいのではないでしょうか。

 

最後にjupyterでダウンロードしたファイルを開けば講義資料が出てくるので、学習が始められます。

 

f:id:at25250410:20180320172444p:plain

 

 

私も今から始めます。とても楽しみです。

 

 

 

pythonのlenとrangeとrandom

リストからランダムに一つのの要素を取り出す

import random

random.choice(リスト)で一つの要素を返す。

 

Ex. target = [1,2,3,4,5]

print(random.choice(target))

実行

>>3

 

range()関数for文とよく使う

Ex. for a in range(3)

              print(“A”)

>>AAA

 

len()関数はリストの大きさを返してくれる。

numpyのuniformとreshape

uniform

random.uniform(low,high)

low以上high未満の一様乱数を1個生成

np.random.uniform(low, high,size)

low以上high未満の一様乱数をsize個の配列を生成

 

Ex. np.random.uniform(-1, 1, 100)の場合

-1以上1未満の一様乱数を100個生成

[0.323, 0.313, 0.55,・・・]みたいな。

np.random.uniform(-1, 1, (100,1,1))の場合

[0.123,0,4354,0.764,・・・]

 

reshape

配列の次元数や大きさを調査する。

X = np.arrange(9)

>>array([0, 1, 2, 3, 4, 5, 6, 7, 8])

X = np.arrange(9).reshape(3, 3)

>>array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

みたいに一次元配列を多次元に変えてくれる。

 

逆に多次元配列を一次元配列に変えるには

x.reshape(-1,)

>>array([0, 1, 2, 3, 4, 5, 6, 7, 8])となる

x.reshape(1, 100, 1, 1)の場合

[1,2,3,・・・]

GANで生成した画像をベクトル化するVevtorizer実装

VEVTORIZER実装続き

 

エラー

AttributeError: 'VectorizerUpdater' object has no attribute 'vec_optimizer'

vec_optimizerではなくget_optimizer修正

 

エラー

TypeError: 'type' object cannot be interpreted as an integer

 

z = Variable(xp.asarray(gen.make_hidden(batchsize, self.device)))#100次元ベクトルの生成

x_fake = gen(z)#3次元の偽画像をGeneraterで生成

vec_array = vec(x_fake)#偽画像をVectorizerで読み込み配列化

 

100次元の乱数ベクトルを生成するところをHiddenDatasetsというClassでデータセットとしてまとめていたが、よくわからなくなったのでVectorizerUpdater()に乱数ベクトルを生成する関数を追加した。

 

引数とかもよくわからなくなったので、

def __init__に

n_hidden = 100

self.n_hidden = n_hiddenを無理やり追加して初期値を設定した。

 

 

net.pyに作ったVectorizerのモデルは、Descripterのモデルの全結合層のところを変えて、出力が100次元になるようにした。

 

 

make_hiddenメソッドを二か所で用いて、二種類の乱数配列を生成していた。

なのでupdaterを大幅改変してデータセットで作った乱数配列を作るようにした。

 

二乗誤差関数

chainer.functions.mean_squared_error(random_array, vec_array)

 

random_arrayとvec_arrayの配列が[1,100,1,1]と[1,100]で誤差の計算が行えずにエラーが出た。

なのでデータセットで生成されるrandom_arrayの型を変更して型を合わせたらエラーが治った。

pythonのクラスとインスタンスについて

クラスとインスタンス

 

passは何も処理がないことを表す

 

クラスとは設計図のことで、クラスを実際に使えるものとして変換したものをインスタンスという。

 

インスタンスはクラス()とすることで生成できる。

 

クラスの中で定義した関数をメソッドと呼ぶ。

 

メソッドdef 関数名(self):   第一引数にselfを追加する必要がある。

 

 

例えば

Carというクラスを作って、インスタンス化して

car_1 = Car() に代入します。

 

クラスの中に変数を定義したいときは、

car_1.name = “TOYOTA”みたいに呼び出せます。

 

またクラスの中で定義したメソッドを呼び出したいときは

car_1.メソッド名()のようにして使用できます。

 

 

__init__メソッドはself.name = 値のように定義してあげると

インスタンス作成時にインスタンス変数として扱えるようになるというものです。

つまり

def __init__

              self.name = ‘TOYOTA

と定義しておけば

car_1 = Car()とインスタンスを生成しただけで、

car.nameは’TOYOTA’という文字列をを持っています。