Neural Network Consoleの使い方

以下自分学習用のメモ。都度追記
・Neural Network Console
https://dl.sony.com/ja/
Windwos版とクラウド版あり
helpは以下
https://support.dl.sony.com/docs-ja/
レイヤーのリファレンスは以下
https://support.dl.sony.com/docs-ja/layer_reference/
●使い方について
ソニー Neural Network Console と エクセルで始める ニューラルネットワーク
https://www.ecomottblog.com/?p=2424
Sampleの日経平均をExcelで作り、Neural Network Consoleで予測した結果
Neural Network Consoleの使い方を紹介!ディープラーニングをやってみよう! | しろまるライフ
https://shiromaru-life.com/deeplearning1/
sampleプロジェクトのデータの4と9の説明が詳細に書いてあり、わかりやすい
Inputで、1,28,28になっている理由(画像が28✕28のパターンが考えられるから)
Sigmoidはシグモンド関数(0か1を出したいときに使用)
ちなみに、BinaryCrossEntropyは、リファレンスにあるが
https://support.dl.sony.com/docs-ja/layer_reference/
データセットの変数は0もしくは1で使用
定番のConvolutional Neural Networkをゼロから理解する – DeepAge
https://deepage.net/deep_learning/2016/11/07/convolutional_neural_network.html
★cedro-blog
http://cedro3.com/
cedroさんのblog。Neural Network Console初めて触る人は、必読のブログ。
過去記事を時系列で全部見ておくと良い。
以下、自分が読み返す用のメモ用要点
[SONY Neural Network Console で 指原莉乃をディープラーニング]
http://cedro3.com/ai/akb48-dl/
・「縮小専用」という画像で、ピクセルを32✕32
・判定画像をs1、そうでない画像をs0に格納し、Sourceにいれ、Outputは空
・1,28,28は、1はモノクロ、28がピクセルを表しているので、
3,32,32、3はRGPに指定
・Ratio(%)は、学習用と評価用の比率の設定。合計100%(例:学習用80、評価用20)
・Output File 1:学習用ファイル
・Output File 2:評価用ファイル
・Batch Sizeは、一度に処理するデータ量
 テストデータが30であれば、30
 
[SONY Neural Network Consoleで指原莉乃をもっとディープラーンング]
http://cedro3.com/ai/akb48-more-dl/
・02_binary_cnn.sdcproj(CNN使用)
・自動最適化機能の使用
 CONFIG→Structure Search→Enable
 にすることで、永久学習する
 
 Method:Radom(時間を掛けて最適化)/Network Feature+Gaussian Process(素早く)
 Optimaize for:Error(とにかく誤差を少なく)かError and Caluculation(誤差も演算量も少なく)
 これを選ぶことにより、モデルが変わる
 
 識別精度(Accuracy)があがればOK
 (EVALUATION→Confusion Matrixで確認できる)
[SONY Neural Network Consoleで日経平均株価をディープラーニング]
http://cedro3.com/ai/nikkei-stock-dl/
・行列のデータ
・csv作成する場合は、utf-8のBOM無(記事では、Calc使っているが、さくらエディタでできる)
・過去5日分ごとのデータをs1.csv→s60.csvというファイルを1つのディレクトリに入れる
・画像データと違い、数値データの場合は、学習用ファイルと評価用ファイルも自分で作る必要有
・学習用ファイルや評価ファイルには、使用する数値データファイルの名前とラベルを記載
例)
x:data,y:label
.\dir\s1.csv,0
.\dir\s2.csv,1
・・・
のように指定
フォルダは3つ作成する
1つはAIの出力用、
残りの2つは学習用と評価用ファイル
尚、コメントにもいろいろな人からの質問があり、
コメントも含めて読み込むこと推奨
・Inputを 1,28,28 → 5,4 に変更
(モノクロ28×28ピクセルの画像から、5行×4列の数値データに変更)
・Max epoch:学習ファイルを何回繰り返して学習させるか
・Batch Size は1回の学習に使うデータ数
 評価データが少ない場合は、その数を指定してもよい
・1つ1つプロジェクトの評価し、
 明らかに評価誤差(Validation error)が高いプロジェクトはスキップ、
 識別精度のプロジェクトを学習・評価済みのニューラルネットワークとする
・y:label は「2」にする(2にしておかないと表示範囲が0,1だけになる)
SONY Neural Network Consoleで女性の顔のクラス分類をやってみる
http://cedro3.com/ai/woman-face-dl/
・LeNet.sdcproj使用
・4つの画像の種類をそれぞれのディレクトリに格納
・自動最適化
・識別精度(Accuracy)の確認
SONY Neural Network Consoleで女性の顔画像を生成してみる
http://cedro3.com/ai/generate-face-dl/
・mnist_dcgan_with_label.sdcproj使用
・学習ファイルが重いので、1/100に加工
・DCGANは2015年考案の高解像度画像の生成モデル
SONY Neural Network Console 画像データの水増しは有効か?
http://cedro3.com/ai/data-inflated-dcgan/
・学習データを増やすため、「XnConvert」を使い、
 「正像、鏡像」×「彩度+ー、変化なし」「ぼかし、ピント強調、ノイズ、変化なし」
 2×3×4=24倍の画像データを作成
SONY Neural Network Console 謎のサンプルデータセット
http://cedro3.com/ai/mystery-sample-dataset/
・変数を使ったもの(画像でも、行列でもない)。変数4つの場合は、1,28,28 → 4に変更
・binary_connect_minst_MLP.sdcproj使用
・変数であれば、変数の値を学習ファイルと評価ファイルに直接書ける
例)入力が4つ、出力が1つであれば
x__0:xxx,x__1:xxx,x__2:xxx,x__3:xxx,y__0:xxx
数字,数字,数字,数字,0
のようにする
・+1~-1にだいたい収まるようにする
 つまり、もとの数値が大きければ、全体の数字を割って、全体がおさまるようにする
 学習ファイルと評価ファイルを上記フォーマットで作ればよい
・Xと数字の間にあるのは、ダブルアンダースコア
SONY Neural Network Console 家賃を推定するニューラルネットワーク
http://cedro3.com/ai/rent-dl/
・回帰問題
・変数使用
・変数は3つ、専有面積、駅徒歩、築年数。出力は賃料で管理費込み
・01‗logistic_regression.sdcproj
1,28,28 → 3
・Max Epochを多めに設定(例:2000回)
・評価データのセーブ
SONY Neural Network Console 年齢を推定するニューラルネットワーク
http://cedro3.com/ai/age-dl/
・「Image Downloder」Chrome拡張でファイル一括ダウンロード、XnCovertでリサイズ
・年齢ごとにフォルダ作成
・CSVファイルを作るのが大変なので、画像格納だけして、
 一度、Output Fileは学習ファイルの方だけ100%で生成、
 この学習用ファイルを編集して、学習ファイルと評価ファイルに分割する
・BinaryConnectAffine_2 は、10 → 1(10分類から変数)。
・Softmax → Sigmoid 、CatgericalCrossEntorpy → SquaredError (分類から回帰)
SONY Neural Network Console 未来を予測するニューラルネットワーク
http://cedro3.com/ai/future-prediction-dl/
・航空会社の乗客数を予測
・乗客数の数値のみ、1年12レコード、これを年数だけ作成
・eleman_net.sdcproj使用
・BinaryCrossEntropy → SquaredError に変更(分類から数値へ)。
・Input を1,28,28 → 12,1 (白黒28×28画像から12行×1列の行列に変更)
・上記だと、予測がイマイチなので、”長期的”なLSTMも実験
 long_short_term_memory(LSTM).sdcproj
 Unitの中に、LSTMというのがあるのでこれが使用できる
SONY Neural Network Console でユーミンをディープラーンング
http://cedro3.com/ai/yuming-predict-song/
http://cedro3.com/ai/yuming-more-dl/
・文章の自動生成、Pythonが必要
anacond、gensim、Mecab、ipadic使用
・SONY Neural Network Console に待望のサンプル画像が追加されました
http://cedro3.com/ai/sample-data-set/
Neural Network Libraries をインストール方法
SONY Neural Network Console でミニAlexnetを作る
http://cedro3.com/ai/mini-alexnet/
・Alexnet:画像認識(2012年)
・ミニ Alexnet を設計を作成し実現する方法
・クラウド版で、データセットアップロードの方法
 データセットアップロードツールを使う
 
SONY Neural Network Console でミニ VGGnet を作る
http://cedro3.com/ai/mini-vgg-net/
・VGGnet:Alexnetの進化形(2014年)
・Batch Normalizationを使わないと精度が悪い
SONY Neural Network Console でミニ Resnet を作る
http://cedro3.com/ai/mini-resnet/
・Resnet:2015年の画像認識、残差学習という手法を入れている
・Resnet のサンプルプロジェクトあり
・ImageAugmentation が変形処理(拡大縮小、回転、歪、反転、輝度変更、コントラスト変更など)を行うことで、いわゆるデータの水増し効果を実現するブロック
SONY Neural Network Console で、顔画像生成に再びトライ
http://cedro3.com/ai/mini-dcgan/
・「ImageSpider」で、キーワードの画像自動ダウンロード
・顔の切り抜きに「OpneCV」を使用(python必要)
http://cedro3.com/2018/01/
途中まで
その他、画像以外で、面白そうなもの
学習済みWord2Vec モデルをサクッと使ってみる
http://cedro3.com/ai/word2vec-gensim/
Keras LSTMでトレンド予測をしてみる
http://cedro3.com/ai/keras-lstm/
Keras LSTMでサクッと文章生成をしてみる
http://cedro3.com/ai/keras-lstm-text/
Keras MLPの文章カテゴリー分類を理解する
http://cedro3.com/ai/keras-mlp-reuters/
Keras MLPの文章カテゴリー分類を日本語のデータセットでやってみる
http://cedro3.com/ai/keras-mlp-livedoor/
http://cedro3.com/2018/10/
までチェック
PyTorch 画像から文章をサクッと生成してみる
http://cedro3.com/ai/pytorch-image-captioning/
PyTorch GPT-2でサクッと文章生成してみる
http://cedro3.com/ai/pytorch-gpt-2/
★ニューラルネットワークコンソール カテゴリーの記事一覧 – “BOKU”のITな日常
https://arakan-pgm-ai.hatenablog.com/archive/category/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB
こちらも最初から記事を読むべき。
サンプルプロジェクトを変更して、新しい名前で保存する:使い方2
https://arakan-pgm-ai.hatenablog.com/entry/2017/20/08/003000
・「convolution」「ReLU」「MaxPooling」の3つの組み合わせ
・CNN( Convolution Neural Network)と呼ばれる、画像の認識精度向上に効果
・追加する層は、inputとAffineの間に挟み込む
オリジナルテキストデータで新規プロジェクト追加:使い方3
https://arakan-pgm-ai.hatenablog.com/entry/2017/23/08/003000
数値からノーマルと太っている人を判断
・「データセットCSVとデータCSVを分けて作る」
 「1ファイルで作成」の2つがある
・datasetの「Image Normalization」(画像の正規化)のチェックははずす
・追加したデータセットの整合性を確認する場合は「Check Consistency」
 最後の行に「No inconsistency were found.」(矛盾は見つかりませんでした。)と表示されればOK
・2値(ノーマルか太っている)ので、BinaryCrossEntropyを使う
 3値以上になったら、そこはSoftmaxCrossEntropyにする
・Inputの指定方法は、変数方式(1つのファイル)なら、引数は1つのみ(xが3個、yが1なら、3と記載)
 ファイル指定なら、行数、列数(1ファイルが「1行3列」なので、1,3)
・Affineのレイヤーを選択して、outshapeを、inputにあわせて「1」にする
レイヤーの層を単純に深くしてもダメなことを確認する:使い方4
https://arakan-pgm-ai.hatenablog.com/entry/2017/26/08/080000
・学習:入力から計算して、重みを計算し、調整していく
 評価:計算した重みを使い、このラベルだと予測する
 
 ① 計算(入力×重み+バイアス):Affine
 ② 次の層に渡す結果を整える:ReLU 又は Sigmoid または Tanh(ハイポリックタンジェント)
 ③ 結果から確率を計算して答えを出す:Softmax
 ④ 答え合わせをする:CategoricalCrossEntropy又はBinaryCrossEntropy(値2つ)
 
 ※サイトではこれが図解して説明されいるため、とてもわかりやすい
 ※③のSoftmax + ④のCategoricalCrossEntropyをあわせたSoftmaxCrossEntropy(値3つ以上)
 を通常は使う
 
 つまり値3つなら
 Affine→(ReLU or Sigmoid or Tanh)→SoftmaxCrossEntropy
 値2つなら、最後がSoftmaxCrossEntropy。ただし、値が2つの場合はSigmoid一択になるので
 Affine→ Sigmoid→BinaryCrossEntropy
 これが1層の基本形。上記に層を追加する場合は①②を加えていく
・Sigmoid は0.0~1.0
 Tanhは、-1から1
 ReLUは、0より小さい数は0にして、0より大きい場合はそのままにする
レイヤー「Affine」(全結合層)の仕組を数式なしで解説
https://arakan-pgm-ai.hatenablog.com/entry/2018/05/11/090000
・o = Wi+b (iは入力、oは出力、Wは重み、bはバイアス項を示す)
・o,w,iは行列データ
・wiは内積(行列の掛け算)
・全結合層は行列を平らにして計算する
・(28,28,1)=幅28×高さ28×1チャンネルのデータなら、一旦 28×28×1=>784のサイズの1次元にする
CNNの「MaxPoolingレイヤー=プーリング層)」の仕組を、数式なし解説
https://arakan-pgm-ai.hatenablog.com/entry/2018/16/11/090000
・Poolingレイヤーは、MaxPooling(最大)、SumPooling(総計)、AveragePooling(平均)から、何度も取得する
・CNN(Convolutional Neural Network)の場合、基本的にConvolutionとPoolingはセットで使う
CNNの「Convolutionレイヤー=畳み込み層)」の仕組を、数式なしで解説
https://arakan-pgm-ai.hatenablog.com/entry/2018/14/11/090000
・Convolution=畳み込み層
・もし、Affineで行おうとすると、平にすることにより
 28×28×1=>784のサイズの1次元のデータにして計算するので、
 二次元だった時の位置情報を失ってしまう
 →本来違う画像なのに、同じ画像として認識してしまう
 位置情報を残すために、Convolutionを使う
・フィルター:カーネル(Kernel)をかけあわせることで
 Affine=全結合層では区別がつかなかった画像が、Convolution=畳み込み層で区別がつくようになる
・実際の設定は、ConvolutionのkernelShapeが、フィルターのサイズになる
ごく浅いCNN(Convolutional Neural Network)を何パターンか試す:使い方5
https://arakan-pgm-ai.hatenablog.com/entry/2017/27/08/080000
・Convolution→ReLU→MaxPooling
 Convolution→ReLU→Convolution→ReLU→MaxPooling(若干改善)
 Convolution→ReLU→MaxPooling→Convolution→ReLU→MaxPooling(改善)
・4,9の画像サンプルを0~9にする方法
・段階的に出力結果をへらす(例では、2304→144→10)とするため、Affineを挟んでいる
Xavierの初期値/Heの初期値の使い分けと「Optimizer」の選び方:使い方6
https://arakan-pgm-ai.hatenablog.com/entry/2017/02/09/003000
・重み(w)を計算して、結果と正解を比較して、差異がある(損失率)場合に小さくしていくため、
 重みを増やしたり減らしたりして、更新していく
・重みの初期値はConvolutionとAffineの各レイヤーにある、「W.Initializer」・・・Editで選ぶ
・初期値で有名なもので「Xavierの初期値」というのがあり、
 「Sigmoid」か「Tanh」で使用する(ReLUは使用しない)
 NormalConvolutionGlorot or NormalAffineGlorot
・ReLUはHeの初期値を使う
 NormalConvolutionHeForward or NormalAffineHeForward
・Optimizerは、重みの更新の調整幅のこと・・・・configで設定できる
 代表的なOptimizerは
 SGD:単純に一定の値を増やしたり、減らしたりする
 Momentum:SGDの改善版。ジグザグが小さくなる方向に幅を調整する
 AdaGrad:学習の進むにつれて、学習係数を減衰させ、収束しやすくする
 Adam:MomentumとAdaGradの合体
 優れているの、デフォルトは、Adamに設定されている
Epoch数とミニバッチサイズの解説と、変化させた時の精度の変化:使い方7
https://arakan-pgm-ai.hatenablog.com/entry/2017/03/09/080000
・Max Epoch:学習回数
・Batch Size:1回の学習の単位
 デフォルトは「Epoch=100」「Bach Size=64」、Traiingデータは1500件の場合、
 1回の処理で64件、1500件で1単位の学習を100回繰り返す(1500×100で15万の学習)
 
過学習を体験して、抑制する技術(レイヤー)を軽く使ってみる:使い方8
https://arakan-pgm-ai.hatenablog.com/entry/2017/09/09/003000
・過学習は学習のさせすぎ以外にも、学習データが少ない、複雑なネットワークが考えられる
・過学習が起きると、認識精度(%)が落ちる
・データを増やすのが良いが、増やせない場合は「DropOut」と「BatchNormalizasion」を使う
 DropOut:データを間引く。計算(Convolution)の”前”に置く。
 間引く割合は「p」。初期値は0.5なので半分間引く
 BatchNormalizasion:バラ付きを補正する。計算(Convolution、Affine)の”後”に置く
・DropOutと、BatchNormalizasionを使う場合は、MaxEpochを増やす
 増やさないと学習の途中で終わってしまう(例では、Epochを100→700に変更していた)
オリジナル画像で新規データ・セットを追加する手順:使い方9
https://arakan-pgm-ai.hatenablog.com/entry/2017/10/09/003000
・Excelマクロによる画像データ生成と学習について。基本今までの内容でわかるはずだが
・Ratio:学習用と評価用の振り分け。(だいたい、75と25)合計が100になるようにする
・AffineのOUTPUTをデフォルトの100から1に変更する(これをしないと評価が下がる)
画像データを加工する「ImageAugmentation」レイヤーの出力イメージを確認/使い方10
https://arakan-pgm-ai.hatenablog.com/entry/2017/17/09/003000
・画像の水増しで、ImageAugmentationを使用する
・SquaredErrorを0
・Max Epochを0
・ImageAugmentationで、MinScale を 1.0→ 0.8、MaxScaleを1.0→1.5 に変更することで
 0.8倍~1.5倍の間でランダムに拡大縮小する
・他にも、Angle(傾ける)、FlipLR(左右反転)、FilpUD(上下反転)、Distotion(ランダムで歪ませる)
CNNの精度向上:MeanSubtractionレイヤーの効果を試す/使い方11
https://arakan-pgm-ai.hatenablog.com/entry/2017/23/09/003000
・精度が向上する前処理として、MeanSubtraction
・mean.initializerMuを0.2に設定
サンプルプロジェクト:オートエンコーダ(AUTO_ENCODER)とは何だろう:使い方12
https://arakan-pgm-ai.hatenablog.com/entry/2017/24/09/080000
・例では2次元→1次元→2次元で画像がはっきりする
サンプルプロジェクト:LeNet(CNNの原型)を使ってみる:使い方13
https://arakan-pgm-ai.hatenablog.com/entry/2017/01/10/080000
・LeNet:LeNet-5(5層構造)というCNNの有名な図のサンプル(LeNet.sdcproj)
・他にも、resnet(resnet-152:152層)があり、精度は高いが、GPUでないと動かない。CPUなら、LeNet
CNNにBatchNormalizationを適用して認識精度向上効果を試す
https://arakan-pgm-ai.hatenablog.com/entry/2017/07/10/080000
・BatchNormalizationの検証
RNNの種類/サンプルでシンプルRNNの「elman_net」を体験する
https://arakan-pgm-ai.hatenablog.com/entry/2017/08/10/080000
・CNNは今、現在
・RNNは時系列の変化(年間の変化や、月ごと)
・RNNにはelman_net、LSTM、GRUの3つがある
・elman_netはシンプルだが、長時間のデータは不向き
・LSTM、GRUは長期、短期OK
 LSTMのほうがパラメータが多く、学習時間がかかるが
 場合によってはGRUよりパフォーマンスが出ることがある
・サンプルプロジェクト一覧があり
(elman_net、GRU、LSTMという文字列が含まれている)
・elman_netは、RecurrentInputからReccurentOutputの間を時系列データの時間軸で繰り返す
シンプルRNN「elman_net」でSINカーブトレースをやってみる
https://arakan-pgm-ai.hatenablog.com/entry/2017/17/10/080000
※過去データから未来予測できるわけではない、という大事なことが記載されている
・Sinの関数で実測値(csv8個)を入れて、予測値を入れてどの程度誤差があるかを確認
LSTM(Long Short-Term Memory)ユニットでSINカーブトレース
https://arakan-pgm-ai.hatenablog.com/entry/2017/25/10/080000
LSTMで売上の予測っぽいことを試みる時の失敗例
https://arakan-pgm-ai.hatenablog.com/entry/2017/29/10/080000
それっぽくみたが、Verの違いにより結果が変わってしまった例
現在データを学習したあと、学習結果のファイルを複製して、
再度読み直して、CSVの数を増やす
(前のパラメータだけだと、何回やっても同じ評価になるから)
★日別売上の予測っぽい事に再チャレンジ。CNNでやってみた/Neural Network Consoleの使い方

タイトルとURLをコピーしました