Anaconda,Jupyter NotebookでTesnsorFlow

Anaconda,Jupyter Notebook

こちらのサイトによると、データサイエンスに特化したプラットフォームということです。
最近人気のPythonとJavaの戦いを行いたく、Pythonを学習することにしました。せっかくなので以前打ちのめされた「TensorFlow」を学習したいと思っています。

インストール方法

Windowsの場合は、インストーラーがあるので、一発でインストールできます。https://www.anaconda.com/download/

筆者のインストールしたバージョンは、こちらのドキュメントで解説しているようでしたので、これを参考にします。

実行する

上記のドキュメントを参考にすると次のように実行するようです。
実行すると、ウェブサーバーをローカルで起動するので、ブラウザで「localhost/XXX」のような形のURLが見れると思います。
実行したら下のような画面が見れます。

右恥の「New」をクリックしてテキストファイルを選択すると新しいテキストファイルが作成できます。

同様に、Pthonファイルを作成したら下のようになりました。やはり「ハローワールド」を実行しました。

ライブラリの追加のためターミナルを起動するには

これで、「pip」コマンドが使えるので、大体のライブラリはインストールできるようです。

今日はここまでにします。でわでわ。。。

JavaFX + ND4J〜数学への挑戦6:グラフの土台を作る〜

イントロダクション

前回は、LineChartを使用して折れ線グラフを作成しました。他にも〜Chartクラスを漁ってみましたが適当なものが見つからなかったのでCanvasクラスを使用しようと思います。

<漁ってみたクラス>

  1. JavaFX グラフ描画〜AreaChartを使う〜
  2. JavaFX LineChart 〜グラフを描く、ワンポイントレッスン的な〜

Canvasを使う

ラップされたクラスを使用すると楽にできます。。。駄菓子菓子「細かい調節が効かない」という欠点を持っています。これはJavaに限らずPthon, Ruby, JavaSriptなどの高レベルAPIと呼ばれるプログラミング言語では潜在するものです。その代わり、楽に作れるのがポイント!

そして、Javaはちょっと特殊で「高レベルAPI」と呼ばれるものと「低レベルAPI」と呼ばれるものが混在します。Pythonでも似た様なことをいうときがありますが。。。

早い話が

画面上のグラフの土台から全部描いてしまおうというわけです。

GraphcContextを使う

結論から言うとこんな感じでグラフの土台を作成しました。

X軸とY軸はちょいと太めの線で描画しています。そして、補助線は薄い色で描画しています。現状では、4分割する様な形で補助線を引いていますが、これはいじれるようになっています。

<コード>

public class Graphics2DView extends Parent implements MathKitView {

	/* (non-Javadoc)
	 * @see zenryokuservice.mathkit.MathKitView#loadView(javafx.scene.layout.VBox)
	 */
	@Override
	public Parent loadView(VBox root) {
		Canvas canvas = new Canvas(600, 600);
		GraphicsContext ctx = canvas.getGraphicsContext2D();
		// グラフの土台を作る
		drawGraphBase(ctx, root);
		root.getChildren().add(canvas);
		return root;
	}

	/**
	 * グラフの土台になる部分を描画します。
	 * @param ctx Canvasから取得したクラス
	 * @param root レイアウトクラス(シーン追加する)
	 */
	private void drawGraphBase(GraphicsContext ctx, VBox root) {
		ctx.setStroke(Color.BLACK);
		ctx.setLineWidth(2.0);
		// X軸
		ctx.strokeLine(0, 250, 500, 250);
		// Y軸
		ctx.strokeLine(250, 0, 250, 500);
		// マスを作る
		double span = 500 / 4;
		ctx.setLineWidth(0.5);
		for (int i = 0; i <= 4; i++) {
			if (i == 0 || i == 2 || i == 4) {
				continue;
			}
			// 縦の補助線
			ctx.strokeLine(i * span, 0, i * span, 500);
			// 横の補助線
			ctx.strokeLine(0, i * span, 500, i * span);
		}
	}
}

※上のコードだけで描画できるのはそう言う仕組みを作ったからです。その仕組みはこちらを参照ください。Gitからダウンロードもできます。(ここはファイルの差分を表示しています。)

次回は、関数を描画しようと思います。

でわでわ。。。

[rakuten ids="book:18903401"]

 








JavaFX + ND4J 〜グラフ作成:とりあえず表示〜

イントロダクション

前回は、作成するアプリ→「グラフ量産アプリケーション」の概要=クラス図を作成しました。

実はこのクラス図は、足りない部分があります。クラスの関係図は描けているのですが、他に必要なものがあります。これを実装するのには

画面クラスを呼び出す仕組みが必要

なので、今回はこの機能を追加します。

まぁNoteを追加しただけですが。。。

ポイント

メインメソッドを起動してからプロパティファイルを参照してMathKitViewを表示する様な仕組みを作ります。※クラス図は、クラスの関係を記載しただけなのでこの様な実装になるかどうかはわかりませんが、自分はこの様なイメージで作成しました。

そして、実装した結果クラスの一覧をEclipseで一覧すると以下の様になります。

そして、実行してみます。

グラフはこんな感じ

左にある赤い字は、ND4Jを起動した時にデルログです。実行するたびに違う値のグラフができます。※データはND4Jでランダムに生成しています。


[rakuten ids="rakutenkobo-ebooks:17144808"]



JavaFX + ND4J 〜数学への挑戦:5グラフを描く〜

イントロダクション

前回は、ND4Jで色々なベクトル(配列)を生成するプログラムを作成しました。(GitにUPしているサンプルコードです)、ここでわかったのは機械学習で扱うデータ→ベクトルを扱うためのプログラム方法を理解した。。。というところです。

グラフを描画する

ここにきてようやく「JavaFX」の出番です。グラフを描くのに、参考にしている本はPythonを使用しているのでJavaでは理解できません。。。

[rakuten ids="dorama:13311583"]

しかし、Javaは色んなところで役に立ちます。JavaFXを使えば画面などはチョチョイのチョイ?で作ることができます。

LineChartを使って見る〜ワンポイントレッスン的な〜

Oracleのページを参照して実装してみました。※上のものは自分が作ってものではありません。

そして、参考にしている本にはグラフが沢山あるので、必然的に沢山のグラフを描く必要があります。なので、グラフの土台を作りこの本の続きをやろうと考えました。

まずは設計

どの様な仕組みを作ってグラフの量産をして、行列の計算や数学の関数を表現するか?を考えて作成します。とりあえずは下の様な感じで作りました。

設計内容など、オブジェクト指向的に作成しました、詳細は下のリンク先に記載しております。

  1. JavaFX + ND4J 〜グラフ作成の準備〜
  2. JavaFX + ND4J 〜グラフ作成:とりあえず表示〜

しかし問題が。。。

上のプログラムで使用したクラス「LineChart」は滑らかな曲線が描けないのです。「折れ線グラフ」として申し分ないのですが、機械学習では「2次関数〜」も使用するので、滑らかなグラフも必要です。そんなわけでグラフの量産アプリを作成しました。

次は、

滑らかなグラフを描く!

でわでわ。。。

[rakuten ids="okusuriyasan:10018779"]



Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

イントロダクション

前回は、ND4Jによる、行列の演算を行いました。

単純に計算処理を行うだけなので、ハローワールド的な感じです。ポイントは行列の形(ROWx?, COLx?)を指定できるのがNumpyとの違いです。

<実行結果はこんな感じでした。>

そして、参考にしている本は下の本です。

[rakuten ids="hmvjapan:17123794"]

2.9.5:連続した整数のベクトル生成

参考にしている本の項番を参照してください。本の39ページから始めます。

<補足>

Javaでの配列(ベクトル)への値を参照するには以下のようにやります。メソッド経由でアクセスできます。

今回の配列(ベクトル)は2次元配列なので下のように取得します。配列の位置は次のような感じです。配列の(0, 0) → [[0.20,  0.29], [0.27,  0.27]]※太字の部分が(0, 0)の位置にある値です。

"割り算の答えの0番目(INT)" + answer.getInt(0, 0)); 
"割り算の答えの0番目(INT)" + answer.getInt(0, 1)); 
"割り算の答えの0番目(Double)" + answer.getDouble(1, 0)); 
"割り算の答えの0番目(Double)" + answer.getDouble(1, 1)); 

詳細部分はJavaDocを見る

実装したコードはこちら(GIT)