パンケーキ日記

ふらっと思ったことや備忘録などパンケーキに全く関係ないことをつぶやく

※ パンケーキの情報はありません

iPad Pro 2018 12.9インチの気になるケース

iPad pro の新型が発表されてから, もうすぐ一か月.

インターネットで「iPadを使って爆速で論文を読む!」みたいな記事を見つけてからずっとiPadが欲しい日々が続いていた.

そんな中, 新型のiPad proが発表されることを知ってすぐに買うことを決断.

迷いは無かった.

だから発表会の日に速攻で予約してやる気まんまんだった.

でもcellerモデルがほしかったので, もう少しキャリアの動きを見てから買おうと思った.

落ち着け自分 ('v')

そして間もなくして各社のお得なキャリアプランが発表された.

けど, 結局何だかんだあってApple StoreSIMフリーのcellerモデルを買うことにした.

でも, ここで一つ問題が生じた.


Apple Pencil対応のいい感じのケースないじゃん!!!!


いや, ないじゃん!!!

Amazon探してみるとまああるにはあるけど.....って感じのやつばかりで色のバリエーションも少ない

もっとかわいいの欲しいよ~ 

ふえ~ん

これじゃまな板届いても使えないよお......(・´з`・)



でもさっきちょっとイイ感じのケースを見つけてしまった.


四隅が守れて, 絵をかくときにちょうどいい角度にできて, カラーバリエーションが豊富で, それなりの値段........

キーボードなんてついてなくていい...

使いたくなったらBluetoothキーボードでいい....

ちょうどいいやつ!

it-donya.com


結構いいんじゃね!?

IT問屋ってとこのらしい.

聞いたことない.

よくわかんない.

軽く口コミとかも調べてみたけど情報が全然ないので分からない

ほんとにわからない

でも見た感じApple Pencil使えるっぽいのできっとそうなんだろう

そういうことにしておこう

ちなみにネットで「iPad Pro2018 ケース」みたいにググって調べてて発見したのではなく, Wowmaで発見した.

Wowmaが扱っているということは大丈夫なのかな???


これにしよっかな....(まだ買ってない)

誤差逆伝搬のメモ

VAEを実装しようとした.

そしたらことごとく勾配が合わなかった.

問題を簡単にしようとまずはKLダイバージェンスの項を考えずに,
単純に全結合からなるニューラルネットの復元誤差を考えた.

復元誤差を交差エントロピー誤差とし, 誤差逆伝搬させる.

勾配が合わない. 全く合わない...

次に, 復元誤差を二乗誤差として誤差逆伝搬させる.

合う. とても合う.

じゃあなぜ交差エントロピー誤差は合わない?

微分が間違っているとしか考えられない.

交差エントロピー誤差は, あるD次元入力一つ

\boldsymbol{x} = [x_1, x_2,  \dots, x_D ]

に対してD次元分の総和として

 {\displaystyle
L= - \sum_{d=1}^D \{  x_d \log \hat{x}_d + (1-x_d) \log (1-\hat{x}_d)\}
}

と表されるので( \hat{x}はVAEでデコードした値), データがN個ある場合では,

 {\displaystyle
L= - \sum_{n=1}^N \sum_{d=1}^D \{  x_{nd}  \log \hat{x}_{nd} + (1-x_{nd}) \log (1-\hat{x}_{nd})\}
}

と表せるはず.

今, 入力データxが1次元で1個だけあるとする.

そうすれば, 交差エントロピー誤差は

 {\displaystyle
L= - \{  x \log \hat{x} + (1-x) \log (1-\hat{x})\}
}

であるので, これを誤差逆伝搬させるために \hat{x}偏微分すれば,

 {\displaystyle
\frac{\partial{L}}{\partial \hat{x}} = - \left\{\frac{x}{\hat{x}} - \frac{(1-x)}{(1-\hat{x})} \right\} 
}

となるはずである.

なので, D次元の入力xがN個あれば(MATLABであれば),

L = - sum(sum(x./y - (1-x)./(1-y)))

とすればいいはず!! (xハットがyに代わりました)



そんなふうに考えていた時期が俺にもありました.


違いますね.


正しくは,

L = - (x./y - (1-x)./(1-y))

ですね...

総和などとる必要は無かった.

損失関数では全体の復元具合を表す一つの数値として全体の総和をとっているが,
勾配を伝えていくときには, 総和された損失関数の中の一つ一つの値を出力した
重みたちに対してそれぞれの勾配を伝えていかなければいけないので, 総和は取らない
(という認識です).

単純に微分したらそうなる

二乗誤差では確かに総和はとっていなかったのになんでだろ...

C++で読み込んだcsvファイルの値を配列に書き込む

C++でファイル読み込みを行う方法は色々あるようですが、以下のサイトを参考にしてコードを書きました。*1
d.hatena.ne.jp

まず読み込むcsvファイルを用意します。今回は以下のような "sample.csv" を用意しました。

f:id:halltan:20171024000948p:plain


実行するC++のコードは以下のようになります。

#include<iostream>
#include<fstream>
using namespace std;

// ファイル読み込み
// 引数で配列のポインタを受け取りそこに値を書き込み
int fileread(int test[], string fname) {
	ifstream fin(fname);
	if (!fin) {							
		cout << "ファイルをオープンできませんでした。\n";
		getchar();		
		exit(0);		// プログラムの終了
	}
	else cout << "ファイルをオープンしました。\n";

	// eofが検出されるまで配列に書き込む
	int i = 1;
	while (1) {
		fin >> test[i];
		if (fin.eof())	break;
		i++;
	}
	fin.close();
	cout << "ファイルをクローズしました。\n";

	return i;	                // 配列の長さを返す
}


int main() {
	const int num = 200;		// 配列の初期化サイズ
	int test[num];			// 配列初期化
	int flen;			// 読み込むデータサイズの変数
	string fname = "sample.csv";	// 読み込むファイル名
	flen = fileread(test, fname);	// ファイル読み込み関数実行

	// 読み込めているか確認
	for (int i = 1; i <= flen; i++) {	
		cout << test[i] << endl;
	}

	// コンソール画面が消えないように
	getchar();
	return 0;
}


これで以下のような実行結果が得られました。

f:id:halltan:20171024001945p:plain


が、なぜこのような挙動が可能なのか自分自身まだ理解できていません(なぜ配列のポインタが受け取れているのか分からない)。

勉強しなきゃ。

*1:高橋麻奈「やさしいC++」第4版, SB Creative (2013) も参考にしました

ソースコードが折り返されてうっとうしい

先日書いた記事でpythonコードを貼ったけど、リアルタイムプレビューでは表示されているプログラム表示部の横スクロールバーが実際のブログの画面では表示されておらずソースコードが折り返されていてとても見づらい。

何個か調べてやってみたけどスクロールバー表示される気配がない。

ごめんなさい。

【追記】
デザイン別のやつに変えたら(PCでは)表示されました。


matplotlibで何かしらのデータをモニタリングする

タイトル通りmatplotlibで何かしらのデータをモニタリングするためのプログラムをpythonで書きました。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
from numpy.random import *
import numpy as np
import matplotlib.pyplot as plt
import time

def pause_plot():
    # グラフの初期化
    fig, ax = plt.subplots(1, 1)                # 初期化
    time_range = 61                             # time_range-1 = x軸の範囲
    x_list = range(time_range)                  # [0,1,2,...,time_rage-1]
    x_list.reverse()                            # listの中身をを逆順に並び替え
    x_array = np.array(x_list)                  # list -> array 変換
    y_list = [20]*time_range                    # 20をtime_range個もつ配列
    y_array = []                                # 配列初期化
    lines, = ax.plot(x_list, y_list)            # 初期プロットのオブジェクト受け取り
    lines.set_color('c')                        # グラフ線の色
    lines.set_linewidth(2)                      # グラフ線の幅
    ax.grid(color = 'gray', linestyle = '-')    # gridを表示
    text = plt.text(54.5, 42.5, str(20.0)+" ℃",
                    color='c',fontsize=40)      # 温度テキスト初期化
    ax.set_axis_bgcolor('0.15')                 # 背景の色

    # x, y軸の範囲を設定
    ax.set_xlim((time_range-1, 0))
    ax.set_ylim(0, 50)
    # x, y軸のラベル設定
    plt.xlabel('seconds before [s]')
    plt.ylabel('templeture [℃]')


    while True:
        text.remove()				# 前回の温度を削除
        y_array_before = np.array(y_list)	# 前回の温度配列を保存
        y_list.pop(0)				# 61秒前のデータを削除
        add_data = y_list[-1]+randn()		# 新しい温度データを生成
        y_list.append(add_data)			# 新しい温度データを追加
        y_array = np.array(y_list)		# list->array 変換
        print(y_array[-1])			# 現在の温度表示

        # 1秒前の温度データ領域をグラフから消す
        ax.fill_between(x_array, y_array_before, facecolor='0.15', edgecolor='0.15')
        # 現在の温度データ曲線を表示
        lines.set_data(x_array, y_array)
        # 現在の温度データ領域を塗りつぶす
        ax.fill_between(x_array, y_array, facecolor='c', alpha=0.2, edgecolor='c')
        # 現在の温度を表示
        text = plt.text(54.5, 42.5, str(round(add_data, 1))+" ℃", color='c',fontsize=40)
        # pauseの引数分の時間を開ける [sec]
        # だいたい1秒くらいになるように調整する(正確にやるやり方はまた今度がんばろう...)
        plt.pause(0.85)

if __name__ == "__main__":
    pause_plot()

実行結果は以下のような感じです。
f:id:halltan:20171018131655p:plain

windowsCPU使用率とかのグラフをパクりました。

でもあんなにちゃんとしてないのでただのパチもんです。

今回は温度センサのデータをモニタリングすることを想定したデザインにしています。

ですがセンサ信号のやりとりの部分は全くコードに書いていません。はい。

なので、てきとーに自分で温度を初期化してランダムな値を足したり引いたりしています。

そして時間間隔は超テキトーなのでちゃんとやりたい人は直して下さい。

恐らくもっとスマートな書き方があるとは思うのですがここらへんで満足しました。はい。



以下のブログを参考にさせていただきました。
qiita.com