C++ の動作確認をしてみた(28)

C++の練習を兼ねて, AtCoder Beginner Contest 060 の 問題C(Sentou), 問題D(Simple Knapsack) を解いてみた.

■感想.
1. 問題C は, 解答方針が, 見つかったので, 解答出来た.
2. 問題D は, 解答方針が見えなかったので, 解説を読んでから, その日本語を, プログラムに翻訳したが, なかなか大変だった(コンパクトに纏めることが出来なかった).


本家のサイトAtCoder Regular Contest 073 Editorialをご覧下さい.


■C++版プログラム(問題C/AC版).

■C++版プログラム(問題D/AC版).

■参照サイト
AtCoder Beginner Contest 060

C++ の動作確認をしてみた(27)

C++の練習を兼ねて, AtCoder Beginner Contest 062 の 問題C(Chocolate Bar), 問題D(3N Numbers) を解いてみた.

■感想.
1. 両問題とも, 解答方針が間違えていたので, 解けなかった.
2. 問題C では, 長方形を, 同じ方向に3分割するパターンが, H or W が 3の倍数という先入観で解いたため, 正答に至らなかった.
-> 例として, [入力例] 5 13 に対し, WA版だと 8, AC版だと, 5 というように出力されるので, WA版のロジック誤りについて, 具体的に理解できた.
3. 問題D では, 中央N項の数列に着目して, 数列a’ の前半N要素の総和, 数列a’ の後半N要素の総和 を 考えてみたが, 上手く行かなかったので, 解答通りに実装し直した.
※LL ans = -99999999999; からスタートして, 最大値を計算しようとすると, 1_10.txt, 2_02.txt で, Wrong Answerとなるので, LL ans = -100000000000000; (10の5乗 × 10の9乗 の符号を マイナス にした数)からスタートして, 最大値を計算する必要があるので注意.
4. 優先順位付きキュー std::priority_queue を使う練習が出来たと思われる(※存在を知らなかった(汗)).


本家のサイトABC #062 / ARC #074 Editorialをご覧下さい.


■C++版プログラム(問題C/WA版).

■C++版プログラム(問題C/AC版).


■C++版プログラム(問題D/WA版).

■C++版プログラム(問題D/AC版).

■参照サイト
AtCoder Beginner Contest 062

C++ の動作確認をしてみた(26)

C++の練習を兼ねて, AtCoder Beginner Contest 064 の 問題D(Insertion) を解いてみた.

■感想.
1. 左括弧 ‘)’ を軸に考えてみたところ, 何とか解答できた.
2. 標準ライブラリ std::deque を使う練習が出来たと思われる.


本家のサイトAtCoder Beginner Contest 064 解説をご覧下さい.


■C++版プログラム(AC版).


■参照サイト
AtCoder Beginner Contest 064

C++ の動作確認をしてみた(25)

C++の練習を兼ねて, AtCoder Grand Contest 028 の 問題B(Removing Blocks) を解いてみた.

■感想.
1. 時間内で, 解答方針が全く分からなかったので, コンテスト終了後に, 解答を確認して, コーディングしてみた.
2. ブロックの連結についての解説が, なるほどと感心したが, 実際に答案へ反映する作業は, かなり大変だった(汗).


本家のサイトAGC 028 解説をご覧下さい.


■C++版プログラム(AC版).


■入力/出力例

■参照サイト
AtCoder Grand Contest 028

PyTorch の動作確認をしてみた(7)

1. 環境は、Window 10 Home (64bit) 上で行った。

2. Anaconda3 (64bit) – Spyder上で、動作確認を行った。

3. python の バージョンは、python 3.6.5 である。

4. pytorch の バージョンは、pytorch 0.4.1 である。

5. GPU は, NVIDIA社 の GeForce GTX 1050 である。

6. CPU は, Intel社 の Core(TM) i7-7700HQ である。

今回確認した内容は、現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY) の 4.2.2 CNNの構築と学習(P.067 – P.071) である。
前回に引き続き, Fashion-MNIST を 使った, CNN の 画像分類 について, 少し動作確認を行った.
前回の課題として, 書籍上には, 正誤判定の結果に関する, 具体的な情報が未記載だったので, 今回は, 実際に, 画像を出力させるようにプログラムを書き換えて確認することになった.

※プログラムの詳細は、書籍を参考(P.067 – P.071)にして下さい。


■Fashion-MNISTの学習(正誤判定の画像出力版).

■実行結果(epoch = 1).


■実行結果(epoch = 3).


■以上の実行結果から, 以下のことが分かった.
① 例えば, epoch = 1 の 場合, Fashion-MNIST の テスト画像 の (index的に)12番目 について,
“Sandal” と 予想(tensor(5, device=’cuda:0′)) したが, “Sneaker” が 正解(tensor(7, device=’cuda:0′)) との情報が得られた.

② また, 例えば, epoch = 3 の 場合, Fashion-MNIST の テスト画像 の (index的に)25番目 について,
“Shirt” と 予想(tensor(6, device=’cuda:0′)) したが, “Coat” が 正解(tensor(4, device=’cuda:0′)) との情報が得られた.

③ なお, epoch = 1, 3 のいずれも, (index的に)0~8番目 について, 予想 と 正解 が 一致しているとの情報が得られた.


■参照サイト
Adding a dimension to a tensor in PyTorch.
How to turn a list of tensor to tensor?
Fashion-MNIST

■参考書籍
現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY)

C++ の動作確認をしてみた(24)

C++の練習を兼ねて, AtCoder Beginner Contest 112 の 問題C(Pyramid), 問題D(Partition) を解いてみた.

■感想.
1. 問題D は, 時間内で, テストケース C030_scrambled を除いて, 通過したが, ロジック修正を, 自力で出来なかったため, コンテスト終了後, 解説を見て, ロジック修正した.
2. 問題C は, 時間内で, 外枠だけコーディングしたが, 問題の意図を理解できなかったので, コンテスト終了後, 再度解き直した.
3. 問題C は, テストケース in04.txt, in06.txt, in20.txt の Wrong Answer を, 解説見ても, 自力で修正できなかったので, 正解者 の コーディングを参照したところ, N個 の ピラミッド情報 で, ピラミッド高度 に 関する 降順 sort が, 必要なことが分かった(※初回取得で, 高度 0 を取得させないようにするため)ので, ロジック修正した.
4. 個人的には, ここ最近, ABCコンテストの難易度が, かなり上昇気味に感じた, 復習がかなり大変となっている模様(汗).


本家のサイトABC 112 解説をご覧下さい.


■C++版プログラム(問題C).

■C++版プログラム(問題D).


■参照サイト
AtCoder Beginner Contest 112

C++ の動作確認をしてみた(23)

C++の練習を兼ねて, AtCoder Beginner Contest 066 の 問題C(pushpush)を解いてみた.

■感想.
1. 数列の要素を, 問題文の操作で並び順を変えると, 膨大な計算量(O(nの2乗)) が必要となるが, 規則性を見つけると, 計算量が O(n) の 3倍程度 まで, 削減できる点が, 面白いと感じた.
2. 解説を読んだところ, 標準ライブラリ std::deque があるとのことで, 大変参考になったと思う.
3. 標準ライブラリ std::deque を使ってみたところ, 実装が, よりコンパクトにまとまって, びっくりした(汗).


本家のサイトABC066 / ARC077 解説をご覧下さい.


■C++版プログラム.

■C++版プログラム(std::dequeを使った場合).


■参照サイト
AtCoder Beginner Contest 066

PyTorch の動作確認をしてみた(6)

1. 環境は、Window 10 Home (64bit) 上で行った。

2. Anaconda3 (64bit) – Spyder上で、動作確認を行った。

3. python の バージョンは、python 3.6.5 である。

4. pytorch の バージョンは、pytorch 0.4.1 である。

5. GPU は, NVIDIA社 の GeForce GTX 1050 である。

6. CPU は, Intel社 の Core(TM) i7-7700HQ である。

今回確認した内容は、現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY) の 4.2.2 CNNの構築と学習(P.067 – P.071) である。
Fashion-MNIST を 使った, CNN の 画像分類 について書かれていたので, 少し動作確認を行った.
また, tqdm の使い方も確認できた.

※プログラムの詳細は、書籍を参考(P.067 – P.071)にして下さい。


■Fashion-MNISTの学習(GPU版).

■実行結果(GPU版).


■Fashion-MNISTの学習(CPU版).

■実行結果(CPU版).


■以上の実行結果から, 以下のことが分かった.
① 処理速度.
実行結果(GPU版): Elapsed Time: 189.46908950805664[sec]
実行結果(CPU版): Elapsed Time: 1290.8199858665466[sec]
-> GPU版 が CPU版 に比べて, 約6.8倍早く処理できたことが分かった.

② tqdm の 使い方.
著書上の tqdm.tqdm(enumerate~(略)~ では, 動作しなかったので, tqdm(enumerate~(略)~ で 確認した.


■参考書籍
現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY)

PyTorch の動作確認をしてみた(5)

1. 環境は、Window 10 Home (64bit) 上で行った。

2. Anaconda3 (64bit) – Spyder上で、動作確認を行った。

3. python の バージョンは、python 3.6.5 である。

4. pytorch の バージョンは、pytorch 0.4.1 である。

5. GPU は, NVIDIA社 の GeForce GTX 1050 である。

6. CPU は, Intel社 の Core(TM) i7-7700HQ である。

今回確認した内容は、現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY) の 3.3.1 Dropoutによる正則化(P.052 – P.055) である。
Dropoutによる正則化について書かれていたので, 少し動作確認を行った.

※プログラムの詳細は、書籍を参考(P.052 – P.055)にして下さい。


■Dropout無し.

■実行結果(Dropout無し).


■Dropout有り.

■実行結果①(Dropout有り, r = 0.3).

■実行結果②(Dropout有り, r = 0.5 ※書籍と同じ).

■実行結果③(Dropout有り, r = 0.7).


■以上の実行結果から, 以下のことが分かった.
① Dropout を 設定しないと, 過学習が発生していることが分かった.

② Dropout を 設定すると, 過学習を抑制できる分かった.

③ Dropout に 設定する r の値を変えると, 表示されるグラフも大きく変わってくることが分かった.


■参考書籍
現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY)

C++ の動作確認をしてみた(22)

C++の練習を兼ねて, AtCoder Beginner Contest 068 の 問題D(Decrease (Contestant ver.))を解いてみた.

■感想.
1. 問題を読んでも, 方針が全く見えなかった.
2. 解説を読んだところ, 目から鱗で, なるほど, と感心させられ, 大変勉強になったと思う.


本家のサイトAtCoder Regular Contest 079 Editorialをご覧下さい.


■C++版プログラム.


■参照サイト
AtCoder Beginner Contest 068