intellista

engineer's notes about application development, data analysis, and so on

PukiWikiをDockerで見る手順は、たったの3ステップ!

こんにちは!
今回は「PukiWiki」を「Docker」で見る手順をご紹介します。

きっかけ

きっかけは、2019年頃、長年利用していた無料Webホスティングの終了です。
終了により、公開していた私の個人メモ用サイト(「PukiWiki」を利用)も一緒に消滅しました。
サイトはまるごと消滅前に救出したので問題ないのですが、Web形式で見られないのは本当に不便です。
そこで、「Docker」のWindows版である「Docker for Windows」を使って、簡単に本来のWeb形式で見られるようにしました。

ということで今回は「Docker for Windows」を使って「PukiWiki」を見られるようにする方法をご紹介します。

この記事の前提環境

この記事の前提環境は次のとおりです。

なお、私が「Docker for Windows」を導入したころの「Windows10 Home」には「WSL2」が入っていませんでした。
ですが、「Windows10 Home」で「Windows Insider Program」に参加すると、 「WSL2」が入れられたのです。
Windows Insider Program」について次の記事があります。
※個人的には「Windows Insider Program」はオススメできませんが、ご参考頂ければ嬉しいです。
intellista.hatenablog.com

Dockerについて

「Docker」をご存知ですか?
「Docker」とはコンテナ型の仮想環境によりアプリケーションを開発・配置・実行するプラットフォームです。
仮想VM(Virtual Machine)のように物理マシンを仮想化するのではなく、「Docker」はもっと小さな単位(アプリケーション単位、サーバ単位、など)で仮想化します。
前者はハードも含めて仮想化しますが、後者はハードは仮想化せず共有します。
前者に比べて後者はとにかく軽量です。
そのため、近年の台頭がめざましいです。

私はすでに台頭してから知りました。
図書館でとてもわかり易くシンプルな書籍に出会い、ひとりハンズオンしました。
次の「自宅ではじめるDocker入門」という本です。

自宅ではじめるDocker入門 [改訂版] (I/O BOOKS)

この本でひととおりのDockerの操作(Docker Composeも含む)まで習得できました。
説明も例もシンプルかつわかりやすく、本当に助かりました。

ちなみに、「Docker」を使わずにホストOSにそのままPHPやWebサーバをインストールしても、この記事の目的は果たせます。
ですが、あえて「Docker」を使った理由は、次の2点です。

  • ホストOSの環境をできるだけシンプルに保ちたい(いろいろ入れると不安定になりやすい)ため
  • 環境のコピー、バックアップ、引っ越しが超簡単なため
    ※定義ファイルとPukiWiki一式のファイルコピーだけでOK

PukiWikiについて

PukiWiki」をご存じですか?
PukiWiki」とは、自由にページを追加・編集・削除しながらWebドキュメントを構築できる「コンテンツ管理システム」(CMS)のひとつで、日本でつくられたオープンソースのシステムです。
「システム」といっても導入は簡単で、PHP環境にダウンロードしたソース一式を解答すば、いとも簡単に立ち上げられます。
導入が簡単な割に、本格的にドキュメンテーションでき、カスタマイズもし放題なのがとても良いと思います。
290ページ程度という厚くも薄くもないボリューム感もちょうど良かったです。
基本を一気に習得できました。

Dockerを使ってPukiWikiを簡単に見られるようにする方法

Dockerを使ってPukiWikiを簡単に見られるようにする手順を説明します。

フォルダ構成

次のフォルダ構成を前提に手順を説明します。

任意のフォルダ
  src
  docker-compose.yml

src配下に、PukiWikiの配布媒体を展開したもの(運用中のものでもOK)を入れます。
(私の場合は1.4.7を1.5.0にアップデートしたので、Updateファイルも入っていますが、なくても大丈夫です。 )

手順は3ステップだけ!

DockerでPukiWikiを見られるようにする手順は、たったの3ステップです。

  • (1) 定義ファイルの作成
  • (2) 起動バッチの作成と実行
  • (3) ブラウザでアクセス

それでは順に見ていきます。

(1) 定義ファイルの作成

まず、Dockerのコンテナの定義ファイルを作ります。
次の内容のファイルを作り、docker-compose.ymlというファイル名で保存します。

version: "3"
services:
  web-container:
    image: php:5.5-apache
    volumes:
      - ./src/:/var/www/html/
    ports:
      - 8088:80
    expose:
      - 80

このファイルはDockerの各地機能であるDocker Composeという機能の定義ファイルです。

次のようなことを定義しています。

  • 今回前提としたPukiWikiのバージョン(1.5.0)に対応するPHPの公式コンテナ(WebサーバのApache付き)を使う。
    初回実行時には自動的にダウンロードする。
  • 定義ファイルdocker-compose.ymlと同じフォルダにあるsrc(PukiWiが入っているフォルダ)を、コンテナ内のデフォルトのWeb公開用フォルダ(/var/www/html/)に紐づける。
  • ポート番号8088でアクセスできるようにする。
(2) 起動バッチの作成と実行

次のコマンドをバッチファイルにして、実行します。

docker-compose up -d
pause

このコマンドの意味は、同じフォルダにある定義ファイル((1)で作ったもの)を読み込んで、定義内容を実行する、という意味です。

実行すると、次のようになります。

ついでに停止バッチも作っておきましょう。
中身は次の通りです。

docker-compose stop
docker-compose rm
pause

ところで、起動バッチを実行すると、コマンドプロンプトに次のようなエラーが出る場合があります。

error while creating mount source path '/host_mnt/Users/~': mkdir /host_mnt/Users/~: file exists

例えば、次のような感じです。

この場合、上記のURLにアクセスしてもトップページは表示されません。

こんな時は、タスクトレイのDockerアイコンからメニューをたどり、Dockerを再起動すると直るようです。

私の場合、再起動してバッチファイルを実行し直すと、エラーは解消しました。

なお、バッチファイルにするのは必須ではありません。
しかし、毎回同じコマンドを打つくらいなら、たとえ簡単なコマンドでもバッチファイルにしたほうが効率的です。

(3) ブラウザでアクセス

最後にブラウザで次のURLにアクセスすると、PukiWikiのトップページが表示されます。

http://localhost:8088

まとめ

今回は、Dockerを使ってPukiWikiを簡単に見られるようにする方法をご紹介しました。
もし、私と同じように「PukiWiki」をDockerに載せたい、というニーズがありましたら是非、参考にしてみてください!

データ分析の初心者が実務で苦労した4つのポイント!


データ分析のプロジェクトに入っていますが、かなり苦労しています。
初心者の私が苦労している点について、途上段階でのみ書き留められることを残そうと考え、記事にしました。

私は長年、アジャイルでバリバリ(自分で言うか・・・ )のアプリケーション開発をしてきました。
言語は主に、JavaJavaScriptあたりです。
そこから打って変わってPythonで各種ライブラリを使ったデータ分析に取り組み、およそ半年弱が経過しました。

紆余曲折しながらもあれこれ見聞きし手を動かすうちに、次のスキル4つが欠けていることを整理できてきました。

  • (1) データの理解
    データが属する業務の理解、データの仕様、データが入っているシステムやシステム間の仕様
  • (2) データ分析の観点
    どういうことが見たいか、どう見せるとわかりやすいのか、そもそもどういう見せ方があるのか
  • (3) データ分析の基礎的な実装力
    pandas, Matplotlib, などを操る力
  • (4) 機械学習の一般的な基礎知識

確かに、これだけいろいろ欠けていると、つらいものがありますね。
経験上、複数の必要スキルが欠けてしまうと桁違いに難易度が上がります。

特にデータ分析を進める上で大きな障害となっているのは、苦労している順に次のとおりです。

  • (2) データ分析の観点
  • (3) データ分析の基礎的な実装力
  • (1) データの理解
  • (4) 機械学習の一般的な基礎知識

それでは、上記の4つについて、ひとつずつ見ていきます。

データ分析の観点

「(2) データ分析の観点」とは、例えば「ある目的で分析するならこのデータのこの列とこの列に着目すればよいことはわかった。そのとき、この目的ならこういう表やグラフで可視化するのがよい。」といったようなことが感覚的にわかる、ということです。

チームにこれができる人がひとりだけいるので、そこまでかみ砕いた話ができるようにするのが近道かもしれません。
自力では正直、現状ではどうすればスキルアップできるか模索中です。
チームの作業者レベルでは似たり寄ったりで、現状はネットが先生です。
ベースとして統計学の知識も必要なのでは、と統計学基礎のオンライン講座を受講して感じました。
できるだけ体系立てて身につけられるようなものを探しつつ、日々断片的な情報を元に奮闘している状態です。

データ分析の基礎的な実装力

「(3) データ分析の基礎的な実装力」は個人的には、

  • Numpy
  • pandas
  • Matplotlib
  • scikit-learn

の4つをひととおり操れるようになるべし!と目標を定めています。
この4つは「Pythonによるあたらしいデータ分析の教科書」という書籍で知りました。

Pythonによるあたらしいデータ分析の教科書

4つのうちプロジェクトで使っているpandasとMatplotlibだけは読み込みました。
ただ、実務からすると本内容は道しるべととっかかりにはなりますが、かなり表面的でした。
なので、ほとんど調べたり聞いたりの断片のツギハギで乗り切ろうとしている状態です。
他の2つは将来に備えて読み込み中です。

2021年6月4日 追記:

4つの残りの2つ、NumPy、scikit-learnについても読了しました。
知識ゼロから比べると入り口に立てた感じがします。
どんなものか大まかにつかめました。
なお、この本はデータ分析に必要な数学(線形代数微分積分、確率・統計)もトピック的に一式まとめてあり、必要な知識のインデックスとして全体を把握するのには役に立っています。

また「(3) データ分析の基礎的な実装力」は「(2) データ分析の観点」とセットになっています。
つまり、「(2) データ分析の観点」でイメージした見せ方を「(3) データ分析の基礎的な実装力」で素早く的確に実装する、という一連の流れが必要です。

  • (2)が提示されたときに(3)をイメージできるか
  • 次のステップとして(2)も(3)もイメージできるか

と考えたとき、まだ1つめもクリアできていません。

使用中のpandasについては、そもそも体系的な理解が必要だと実感しています。
(今やっている断片のツギハギでは非効率だし限界を感じています。)
そこで、Google検索したときにかなりの頻度で行き着くサイトの方がオススメしている次の書籍「Pythonデータサイエンスハンドブック」(無料の英語版もあり)もチェックしようと考えています。

Pythonデータサイエンスハンドブック - Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習 -

ちょっと古いので、最新バージョンでも通じる内容なのかは気になりますが・・・
現状は何かしようとするたびにネット検索する状態(英語学習に例えれば、1文ごとに辞書を引いているような状態)なので、それよりはかなりマシになるのではと期待しています。

2021年6月4日 追記:

私は「Pythonデータサイエンスハンドブック」(前述)ではなく「Pythonによるデータ分析入門(第2版)」のほうを購入しました。

Pythonによるデータ分析入門 第2版 - NumPy、pandasを使ったデータ処理 -


書店に行って「Pythonデータサイエンスハンドブック」(前述)と中身をザッと比較したのですが、この「Pythonによるデータ分析入門」のほうが今の私に合っていそうでした。
  • Pythonによるデータ分析入門(第2版)」
    • 2018年7月発売、596ページ
    • NumPyとpandasが充実。Matplotlibも少し。scikit-learnは残念ながら対象外。
    • pandas開発者が著者であり、今の私が最も知りたいpandasが厚い。
    • 章立てがわかりやすく、通読にも辞書的にも対応できそう。
    • Python3.6対応
  • Pythonデータサイエンスハンドブック」(前述)
    • 2018年5月発売、556ページ
    • NumPy、pandas、Matplotlib、scikit-learnを一通り詳述
    • 私には章立てがややしっくりこなかったのと、内容が少し難しく感じました。
    • scikit-learnの各モデルを一通り学べるところが魅力。
    • Python3.5対応(Githubより)
Pythonによるデータ分析入門(第2版)」も約600ページの分厚い本ですが、体系的にしっかりと理解できそうです。頑張って習得したいと思います。

また、AI関連の研修で講師の方から「Kaggleのチュートリアルが便利」ということも教えてもらったので、そちらもチェック中です。
www.kaggle.com
なお、Kaggleに関する書籍もいくつか出ていますが、今の私にはハードルが高そうでした。

なお、「Python」の言語自体には苦労していないのですが、「Jupyter Notebook」で書くと途端に破綻し、苦労の連続になります。
Pythonは得意言語ではないのですが、「Python3エンジニア認定基礎試験」を10分くらいで終了して合格した水準です。
なので、「Python」でアプリのバッチ処理など作る分には割とスラスラ書けるほうです。

ですが「Jupyter Notebook」では情けないくらいにぐちゃぐちゃな実装になり、コピーコード、お試しコード、一時変数の嵐となり、結局おばけのようになって読み解けなくなる有様です。
アプリでのコーディングのお作法(変数名から構造化に至るまで)が全く通用しません。
「Jupyter Notebook」でも分析のお作法がわかっていないのだと思いますが、今のところネットも含めて先生を探しつつ奮闘中です。

データの理解

「(1) データの理解」については、大枠では把握できているのですが、段階的に小出しされる仕様に追従し切れていないために、分析対象を見誤る場合があります。
データ分析ではよくあるケースかもしれませんが、データ仕様がカチッとはじめから出そろうわけではなく、中途半端だったり間違った情報が段階的に出てきます。
この小出しされる情報のやりとりが長文メールのCCだったり、非参加の会議だったり、と拾うのが少しやっかいです。
これはどちらかというとコミュニケーションの課題かもしれません。

あと、「データ理解」と「データ加工(前処理)」のプロセスの間にも行ったり来たりがあるように(少なくとも私のいるプロジェクトでは)見えるという点に、気づきました。
これは何の話かというと、「CRISP-DM」というデータ分析の有名なプロセスモデルのひとつに照らし合わせた話になります。
CRISP-DM
「CRISP-DM」は上記のような作業プロセスでデータ分析を進める説明をしています。
コレを見ると、「データ理解 (Data Understanding)」と「データ加工(前処理)=データ準備 (Data Preparation)」は一方通行ですが、私には行ったり来たりに見えています。
もっと言うと、「モデリング (Modeling)」の段階で一部のデータの意味が判明したりして、「データ理解 (Data Understanding)」に戻るようにも見えています。
こうなるとかなり混沌としますが、実際、頭を混乱させながら進めているのが実態です。

早いサイクルで是正を繰り返すの点はアジャイルと共通する考え方なので、すんなり身につけられると想像していたのですが、正直とても甘かったです。
やはり完全に別物だと、いまは痛感しつつ、身につけようとしています。

機械学習の一般的な基礎知識

「(4) 機械学習の一般的な基礎知識」については、今は問題ない程度の基礎知識は身につけられました。
残念ながら業務から得たのではなく、独学しました。
3ヶ月目の終わりに「G検定 2021#1」に合格し、その課程でひととおりのベーシックな知識を体系立てて得られました。
この中の知識で今使っているのは「混同行列」くらいなのが哀しいですが、右も左もわからなかった半年前からすると視界がクリアになりAI関連のサイトや勉強会にもついて行けるようになったのが嬉しいです。
引き続き上位の資格も視野に入れてステップアップしていきたいです。

なお、「G検定」にご興味のある方は、合格までにやったことを整理した記事がありますので、ご参考頂ければ嬉しいです。
intellista.hatenablog.com

まとめ

約半年前にレベル1でスライムをやっと倒していたのが、ようやくドラキーを倒せるレベル3くらいになった感触です。
う~ん、個人的には成長があまりに遅すぎてヘコむ・・・

あと、今は直接の影響はありませんが、実は数学(確率・統計、線形代数微分積分)の知識も不足しています。
まだまだ道のりは長いな、と思いつつも、AI、機械学習の分野には行動範囲を広げていきたいので、今後もスキルアップを目指そうと思います!

なお、データ分析のデファクトスタンダードのひとつとなっている技術にPythonがあります。
Python、Pandas、データ分析、に関するコツなどを次の記事にまとめてありますので、是非読んでみてください!
intellista.hatenablog.com

AI、機械学習まわりの日本語ニュースサイト3つ!


こんにちは。
今回は、AI、機械学習まわりの日本語ニュースサイトを3つご紹介します。
AI、機械学習、というと英語の情報が圧倒的に多く新しく、本当は英語の記事をバンバン読みたいものです。
少なくとも私はまだ英語は精進中なので、日本語での情報集めがメインです。
日本語でも効率よく情報を集められるサイトがありますので、ご紹介します。

AI-SCHOLAR

「AI-SCHOLAR」は、最新のAI論文を日本語で解説した記事がまとまったサイトです。
ai-scholar.tech

イベントのページから、AI系のイベントを探して申し込むこともできます。
会社主催のセミナーが主で、無料のものが多いようです。

AINOW

「AINOW」は、AI系の有用な記事を多数まとめられたキュレーションサイトです。
ainow.ai

イベントのページから、イベントの紹介記事から参加申し込みしたり、開催済イベントのレポート記事を読んだりできます。

Ledge.ai

「Ledge.ai」は、AI系の話題の記事を一望しながらチェックできるキュレーションサイトです。
ledge.ai

イベント告知のタグから、AI系のイベントを探して申し込むこともできます。

まとめ

今回は、AI、機械学習まわりの日本語ニュースサイトを3つご紹介しました。
ぜひ、AI系の最新動向のキャッチアップやキャリアアップに役立ててください!

自宅などからオンラインで勉強できるサイト5選!

f:id:parupuntist:20210523155532p:plain
こんにちは。
今回は、オンラインで勉強できるサイトを5つご紹介ます。
勉強できる内容は、IT系が中心で、特にAI・機械学習まわりメインです。
オンラインなので、自宅でもカフェでも、終業後でも休日でも、場所も時間も自分に合わせやすいところが気に入っています。

オンライン講義

オンラインで大学教授らの講義を受けられるサイトをご紹介します。

Gacco

「gacco」は、日本の大学教授らが講師を務めるオンライン講義を提供するサービスです。
gacco.org

無料で一流講師陣の講義を受けられます。
講座の内容は、AI・機械学習まわり、数学がメインです。(本記事投稿時点)
社会人向けを中心に、大学生向け、高校生向けもありました。
ほか、Google活用など、ビジネス関係の講座もあります。
無料登録すると、すぐにYouTube形式で受講をスタートできます。

Coursera

こちらはグローバルで超有名なオンライン講義サイトです。
www.coursera.org

G検定の問題集にも出てきました。
英語の勉強にもなると思います。
日本語の対訳がある講座もあります。

オンライン勉強会

オンラインの勉強会を探したり、申し込んだりできるサイトをご紹介します。

勉強会は、次のような開催形式があります。

  • ウェビナーのように多数のひとが聴講するもの
    著名人などの講演、有志による配信、など
  • オンライン会議のように数十人が参加して、必要に応じてやりとりしながら進めるもの
    有志による勉強会、ハンズオン演習など

どちらの形式でも、「聞くだけ参加」で気軽に参加できるものばかりでした。(もちろん発言OKなイベントは発言してもOK)
YouTube Live、Zoom、Slack、Teams、などが多いです。
イベント開催通知に事前にインストールしておくツールや参加URLが記載されているので、心配ありません。

connpass

「conpass」はIT系のエンジニア向けの勉強会の発信や参加予約ができるサイトです。
connpass.com

有志や企業主催の勉強会、ハンズオンなどが、毎日のように数多く登録されています。
一部有料のイベントもありますが、無料のものが圧倒的に多いです。
私は参加者として活用していますが、探しやすく予約しやすく、重宝しています。
平日の終業後や休日など、頻繁に参加して技術をキャッチアップしています。
社外の人の話を簡単に聞けるのもいいですね。

Doorkeeper

「Doorkeeper」は、ウェビナーや勉強会を探して申し込めるサイトです。
www.doorkeeper.jp

参加無料のものが多いようです。
最近、社内研修で教えて頂いたので、ここにメモしておきます。

TECH PLAY

「TECH PLAY」は、IT系の勉強会を探して申し込めるサイトです。

techplay.jp
参加無料のものが多いようです。
最近、社内研修で教えて頂いたので、ここにメモしておきます。

まとめ

今回は、オンラインでIT系の内容を勉強できるサイトをまとめました。
是非、スキルアップに活用してください!

プレゼンテーションのコツとは?(コツが凝縮されています!)

f:id:parupuntist:20210523160150p:plain
プレゼンテーションでしっかり着実に、内容を伝えたくありませんか?
今日は「LINE TECHNICAL WRITING MEET-UP」の3回目を聴講しました。
今回も非常に有意義でした。

今回は「ライティングスキル」というよりは「プレゼンテーション」のスキルを学びました。
内容は、多少は日本人の特性にフィットしている気がしますが、汎用的です。
私も日々の業務で、技術的な内余をプレゼンする機会にあふれていますので、本当に助かります。
感謝を込めて、拡散します。
speakerdeck.com

なお、今回はほぼ同じ内容の英語版もある2部構成でした。
内容に加えて英語表現も体験でき、超高効率な時間でした。
speakerdeck.com

Zoomで音が出ないとき (Zoomだけ出ない)


オンラインの勉強会(ウェビナーやハンズオン)で、音が出ないと困りますよね。
私も「PCの音声はちゃんとでているのでに、Zoomだけ音が出ない!」と困りました。

原因は単純で、Zoomの音声出力が未設定だっただけです。
それだけなのですが、数分の試行錯誤が必要だったので、今回記事にしました。
たった数分でも、オンラインセッションが始まってからもたもたしている情報損失は大きいと思います。

Zoomの音がでない!という場合は、是非、次の設定をチェックしてみてください。

なお、本記事ではPC (Windows 10) を前提としています。

設定方法

Zoomの音声出力の設定方法です。
PCから音は出ているのに、Zoomからは音が出ない場合は、下記を確認してみてください。

赤枠内の出力先を切り替えることで、音が出ると思います。
是非、試してみてください。
(できれば、オンラインセッションが始まる前に・・・)

まとめ

今回は、Zoomの音声がでない場合に出力先を見直す方法をご説明しました。
もし同様の事象が発生しましたら、ご参考頂けると嬉しいです。

Kerasの学習済モデルでミニマムコードによる画像分類を試す!


こんにちは!

G検定は取得したものの、依然として機械学習ディープラーニングの実装イメージがわかないのが悩みの種です。
「いろいろなモデルはあるけれど、実際に使うにはどうすれば?」
本当にもどかしいです。

また、インターネットには「いきなり応用編!」といった実装があふれていて、「まず、どうすれば?」といったステップアップが難しいように見えます。
実際、私は人に教えてもらって「なるほど」と実感しました。
実感するとともに、「こんなに入り口が簡単なら、すぐに入れたらいいのに。」とも思いました。

いまPythonでは、かなり簡単に先人のモデルを使えます。
「Keras」といった定番ライブラリを使うことで、誰でも簡単に、その恩恵を受けられます。

そこで、今回はKerasを使った最低限のコードディープラーニングを実装してみようと思います。

前提条件

本記事の前提スキルや環境は次のとおりです。

今回の記事では、とても有名なディープラーニングのモデルで、画像分類を実装します。
モデルは、既に誰でも自由に使えるようになっている学習済のものを利用します。

なお、以降の実装で識別させる画像は、下記の画像を使っています。
ブロッコリー
こちらは「ぱくたそ」というフリー画像提供サイト様のものです。
利用規約上は大丈夫そうでしたが、もしそぐわないようでしたら速攻で見直します!

実装

それでは2つほど実装してみます。

VGG16

ImageNet画像セットで学習済のモデル「VGG16」を使って、ブロッコリーか当ててもらいます!

from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
from google.colab import drive
import numpy as np

# (1) read an input-data
drive.mount('/content/drive')
pixel = 224 # input image size defined by the model you use
img = image.load_img(
    "/content/drive/MyDrive/colab/data/0I9A2143.jpg", # input-image
    target_size=(pixel, pixel)
)

# (2) preprocess the input-data
data = image.img_to_array(img)
data = np.expand_dims(data, axis=0)
data = preprocess_input(data)

# (3) load a trained model
model = VGG16(weights='imagenet')

# (4) predict by the model
preds = model.predict(data)

# (5) show the result predicted by the model
results = decode_predictions(preds, top=10)[0]
for result in results:
    print(result)


結果、次のように「ブロッコリー98.9%」となりました!

('n07714990', 'broccoli', 0.9893301)
('n07714571', 'head_cabbage', 0.004693658)
('n07715103', 'cauliflower', 0.0025434813)
('n07716358', 'zucchini', 0.0012233483)
('n07718472', 'cucumber', 0.00050261203)
('n07745940', 'strawberry', 0.00016703807)
('n03991062', 'pot', 0.00016021698)
('n04522168', 'vase', 7.7303834e-05)
('n03786901', 'mortar', 7.203448e-05)
('n07711569', 'mashed_potato', 6.9734306e-05)

結果はともあれ、実装が恐ろしく簡単すぎるのが実感頂ければ嬉しいです。

InceptionV3

次は「InceptionV3」です。
こちらもImageNet画像セットで学習済のモデルです。

from keras.applications.inception_v3 import InceptionV3, preprocess_input, decode_predictions
from keras.preprocessing import image
from google.colab import drive
import numpy as np

# (1) read an input-data
drive.mount('/content/drive')
pixel = 299 # input image size defined by the model you use
img = image.load_img(
    "/content/drive/MyDrive/colab/data/0I9A2143.jpg", # input-image
    target_size=(pixel, pixel)
)

# (2) preprocess the input-data
data = image.img_to_array(img)
data = np.expand_dims(data, axis=0)
data = preprocess_input(data)

# (3) load a trained model
model = InceptionV3(weights='imagenet')

# (4) predict by the model
preds = model.predict(data)

# (5) show the result predicted by the model
results = decode_predictions(preds, top=10)[0]
for result in results:
    print(result)

VGG16と入力画像サイズが異なる点にご注意ください。
(前者は224、後者は229)

判定させた結果、次のように「ブロッコリー99.8%」と、VGG16を上回る結果となりました!

('n07714990', 'broccoli', 0.9984909)
('n07715103', 'cauliflower', 6.828501e-05)
('n01755581', 'diamondback', 6.221953e-05)
('n02894605', 'breakwater', 2.1083079e-05)
('n07871810', 'meat_loaf', 1.4795806e-05)
('n04326547', 'stone_wall', 1.4509934e-05)
('n01775062', 'wolf_spider', 1.22000065e-05)
('n04596742', 'wok', 8.753435e-06)
('n02172182', 'dung_beetle', 8.67305e-06)
('n04522168', 'vase', 8.660824e-06)

こんなに簡単にディープラーニングのモデルを切り替えられるんです。

まとめ

今回はKerasを使い最低限のコードディープラーニングを実装ました。
ディープラーニングというと、私も何だか得体の知れないような複雑な実装が必要なイメージがありました。
しかし実際はそんなこともなく、用意されているクラスなり関数なりで、簡単に利用できることを知りました。
皆さんも気後れせず、是非どんどん利用してみてください!

なお、機械学習ディープラーニングデファクトスタンダードのひとつとなっている技術にPythonがあります。
Python、Pandas、データ分析、に関するコツなどを次の記事にまとめてありますので、是非読んでみてください!
intellista.hatenablog.com