Tech」カテゴリーアーカイブ

プログラミング授業の仕方を考える。

希望者向けにプログラミン授業をやろうと考えている。利用言語は、考えた結果Scratch。これが一番良さそう。さすが、MIT。これほど洗練されたツールを無料公開しているのが、とても同意できる。技術面とか運用面とか、金銭面意外で手伝うことができればやりたい、と思っている。(残念ながら、今は、金銭面はサポートできないから…)

とはいえ、周りに話を聞くと「プログラミン授業って何?」という人が多い。名前だけ聞いて、コーディングを学ぶ授業だと誤解している人がほとんどだ。

そうだよね。その気持、分かります。

それに、学習の狙いも伝わりづらい・イメージしづらい。

学校の先生はどう思っているのだろうか?理系の自分でも思うのだから、小学校の先生で、携わったことがない方って、もっと分からないし戸惑っているのでは?

大人も子どもも含めて、悩んでいる人の助けになるようなイベントを実施しよう。

とりあえず、文部科学省の公開している手引き(第2版)を、読みやすく紐解くためのプレゼン資料から作成している。

【参考】小学校プログラミング教育の手引(第二版)(2019年11月公表)
http://www.mext.go.jp/component/a_menu/education/micro_detail/__icsFiles/afieldfile/2018/11/06/1403162_02_1.pdf

「福岡 DLLAB Academy: 3時間で入門ディープラーニング」参加のその後。

先日2019年9月14日(土)に参加したセミナで学んだことを、復習した・少し理解が進んだ、というお話。以下が前回の投稿。

「福岡 DLLAB Academy: 3時間で入門ディープラーニング」参加レポート。ディープラーニングは難しくない?

Google Colabでスクリプトを全部手打ちしてみる

今の時代ではもはや原始的な方法かも…と思いつつ、セミナ中に配布されたコードを自分のGoogle Colabのページにスクラッチ。実際に手を動かしたほうが理解が進む。

とはいえ、とんがった部分もあるので100%は理解してないものの、「あ、この部分はセミナで講師が言ってたこの部分か」、「この部分はこう指定するのか」と復習しながらコーディングできたので楽しかった。

精度の向上にトライ。結果、91%までUP。

演算は「アヤメの品種を分類する」というもので、自分たちでハイパーパラメータをいじって、より精度の高いディープラーニングを行う、というもの。結果、91%ぐらいまで高めることができた。

いじったパラメータは、以下のとおり。

  • 中間層のノードを100
  • epochを30
  • iterationを5

epochを増やせばそれだけ訓練データで学習するという理解なので、精度が高まるかと思いきや、多くしても精度が下がってしまったのが意外だった。

中間層ノードを増やしたことが一番効いているのかも?(試したのは、10→5→15→100)だが、内部でどういう計算をされているのかは理解できておらず…。この部分はぜひ理解して、仮説を立てられるようになる。

ちなみに、ネットワークは4入力>100ノード>3出力という、超シンプルな構成。訓練データ数が少ないので、何となく、ネットワークもシンプルな方が良いのかも、と思ってシンプルにしてみた。

ちなみに中間層を増やしてみたりしたが、精度が高まる場合もあれば、下がる場合もあって、「多けりゃいい」というものでもないということが分かった。ん〜、おもしろい。

座学の丁寧さがありがたい、と再認識。ハードルが下がることは学習の助けになる。

セミナに参加したのと参加してないのでは、学習スピードが異なったと思う。それは、座学を丁寧に進めてくれたおかげだと痛感。

上記のとおり、まだまだ理解できていない部分もあるが、理解スピードはきっと速いし、何が分かって何が分かってないかをはっきりできているだけでも、かなり嬉しい。

定期的に実施されているようなので、興味のある人は、ぜひ。

「福岡 DLLAB Academy: 3時間で入門ディープラーニング」参加レポート。ディープラーニングは難しくない?

2019年9月14日(土)に、タイトルのセミナに参加したので、レポートがてらポストしてみる。結論としては、ニューラルネットワークとかディープラーニングの基礎の基礎を、手を動かしながら学ぶことができて、とても勉強になった。

予習したこと

  • ディープラーニングの触り
  • ニューラルネットワークの触り
  • Chainerの触り
  • Colabの触りと少し動かした

特に、ニューラルネットワークは、設計>訓練>評価という流れで構築していく、ということが分かってよかった。(う〜ん、どれだけ初心者なんだ、、、と思いつつ、初心者だから参加するんだよね、と自分を励ましつつ参加)

やったこと・キーワード

  • 分類と回帰、与えられた情報から予測するのが回帰
  • 線形変換と非線形変換
  • ニューラルネットワークの手計算、順伝播播
    • パラメータをランダムに決める
    • 損失関数を計算する
    • パラメータを調整する(←機械学習の「学習」とは、コンピュータによるパラメータの調整を指す)
  • 人間の得意なことと、コンピュータの得意なこと。それぞれ得意なことを分担する。
  • 訓練データ、検証データ、テストデータ
    • 訓練データと検証データで繰り返しパラメータの調整。人間が調整するパラメータをハイパーパラメータと言う
    • テストデータは最後の評価として1回だけ使う
  • 目的関数(損失関数)、代表的なものは「回帰→平均二乗誤差」で「分類→交差エントロピー」
  • エントロピー(情報量)は、意外なものの方が多い。例えば「コンビニの店員が外国人」は今や当たり前なので情報量が少なく、「コンビニの店員の身長が2m30cm」はあまりないので情報量が多い。
  • 学習率はハイパーパラメータ、人間が調整する
  • batch size(バッチサイズ), epoch(エポック), iteration(イテレーション)

振り返り①:座学は優しい(初心者でもOK)

座学は初心者でも分かるような内容で楽しかった。何となく「あぁ、こういうものなんだな」と分かった気になった。

振り返り②:演習はなんか難しい(初心者は苦しいかも)

ただ、演習に入るといきなり難易度がUP。理由などは以下のとおり。

  • 座学は難しいことをすごくシンプルにして教えてくれるので分かった気になる
  • が、演算は実際にコーディング作業が少しだけ入る。もちろん、99%が出来上がっているコーディングが配布されて、一部のパラメータ、上記でいうハイパーパラメータのみをいじればほぼOKだが、座学のシンプルさとはかけ離れて、かなり実践的な内容だしユーザIFだったのでついていくのに必死
  • で、結局「このハイパーパラメータを変えるときっとこうなる」という仮説も立てることができなかったので、なんかおもしろくない、理解できない。
  • ということで、座学で分かったつもりになっていて実は分かっていなかったことが浮き彫りにできたし、損失関数とかパラメータとか順伝播とかそういった専門用語の理解が進んだ
  • 予習をしておいたので、少しはマシだった気がする。もっと丁寧に予習しておいた方が良い。何にでも言えることかもしれないが…。

振り返り③:ColabとPython、ディープラーニングの勉強

Google Driveとの連携ができて、ブラウザ上で教科書(主催者側が用意)のソースコードを実行しつつ、自分でアレンジして実行しつつ、セミナを受けることができたのは、各自のペースでハンズオンの学習効率の高い、とても良い進め方だと思った。

振り返り④:ノートは用意しておくべし

事前連絡で、紙かノートを用意しておくこと、とあったし、当日、紙とペンの配布はあったけど、圧倒的にノートの方が良いと思った。理由は、結構書くから。

ノートの方が、保存がきくし、枚数が増えても綴られているから気にならない。ノートは必ず持参すべし。

結論

ディープラーニング初心者(基本知識なし)では少々厳しい感じがするが、個人的には有意義なセミナーで、ぜひ、今後も継続して受講したいと思った。きっと、自分の勉強の張り合いにもなる。知り合いもできたし、継続して勉強していく。

「Web Marketing × Machine Learning Meetup!!」参加したら、試行錯誤されている過程を赤裸々に紹介してもらって、とても励みになった。

昨晩(2019年9月5日)に参加したイベント。仕事の出張で東京に行く機会があったので、何かないかと探して辿り着いた。結果、参加してよかったと思えるイベントだった。

https://datascience-strategy.connpass.com/event/137380/

Machine Learning(以下、ML)をこれから始めるという超ビギナーなぼくなので、イベント内容の難易度すら測りづらいのが本音だが、幸いそこまで高度な内容ではなかった。

発表者の方が、あるオンラインゲームの開発に携わっておられて、ゲーム利用率アップのための施策を検討・実施するための判断材料として、データサイエンスを活用。その中で、MLにトライしてみて、試行錯誤しましたよ、というのを、結構生々しく話していただいた。

どちらかというとシンプルな内容。だからこそ、ぼくにとっては励みになった。なるほど、こういう風にやるのか、と。作業イメージがつくのは、取り組みの(特にメンタル的な)ハードルを下げてくれるので、とても価値がある。

発表後に、ご本人と直接話しをさせてもらったし。ぼくのチャレンジも、これからちょこちょこ連絡させていただこうと思う。一緒に切磋琢磨できる関係性が築ければ、とても嬉しい。

P.S.
それにしても、会場がおしゃれだった。雰囲気がステキ。

Twitter Developer!

個人的に一番注目しているSNSはTwitter。なぜなら、情報が超過多となる近未来では、人々は、以下に注目・収束すると考えているから。

  • シンプルに効率よく情報を仕入れる
  • シンプルに効率よく情報を発信する
  • そして、未来予測する

この条件を合致させるのが、Twitterだと考えている。Instagramもまどろっこしくなると思う。

ぼくは写真を撮るので「Instagramは外せない!」と言いそうだが、実はその逆だ。「メッセージを伝え、ストーリーを語る写真」が「うまい写真」であって、ぼくの目指している写真だけど、Instagramは「きれいな写真」が受け入れられるSNSというトレンドが強いと思っているので、個人的には注目していないし、動画が投稿できるようになった時点で、これは決定的に離脱だな、と思った。

ということで、Instagramはまどろっこしくなるだろうし、まどろっこしくないTwitterがトレンドになると思っている。特に、スマートウォッチがこれから普及してくだろうから。

ということで、Twitter Developerに登録してみた。なにかしたら、コーディングしていく予定。

ぼくのメモ

徒然なるままに。ふと疑問に思って手帳に書いていたものを、なんとなく備忘として投稿してみる。

  • 伝書鳩ってどうやって育てるの?
  • Trip Advisorの公開APIってある?
  • Theory of Marginal Gains (Dave Brailsford)
    • 1%の法則
    • 目標の分解、成果を出すための必要な要素の見極め
    • 目標達成に必要な要素を、毎日少しずつ1%でも良いので改善していく
    • 1.01の365乗(すなわち、その日に昨日の1%を改善することを毎日1年間続けた場合)は、スタート時点からおよそ38倍になる!
    • 小さな1%の積み重ねは大きな成果を生む

UdemyでPythonを学習してみる

セールだったので前々から勉強してみたいと思っていたPythonをUdemyで学習してみることに。書籍の購入とUdemy(動画での学習)、どちらが効率的かを試してみる。

“Chrome + Keep” is the best way to make my memo. | Chrome + Keep が僕にとって最高なわけ。

I’m always seeking my best style to make memo with some Web browsers with my lovely laptop PC. Safari and Chrome. They are my IT friends and give me troubles sometimes. But finally, I found the best way to make my memo with them.

Chrome + Keep, it’s my best way.

The most valuable reason is we can use both Youtube and memo at the same time. I mean when we watch the youtube movie and want to make a memo, we can create that quickly with them.

How?
It’s very simple. Just only push the keep button in the menu bar in chrome.
Furthermore, we can add tags to simply search!
And the memo is saved automatically.

umm…, it’s very simple and useful. It’s great.
I finally found, haha.

Safariを使うかChromeを使うか。
それは僕にとって永遠の課題。
Apple製品で固めることの良い点は、同期が素晴らしいところ。
あと、格好いい。断トツに。

一方で、Chromeは拡張性が高く、特にPC版のChromeは便利が良い。
具体例を上げるなら、Twitter。おもしろいと思うページを見ていて「これはTweetしたい」と思っても、Safariの場合はいちいちTwitterを開いて当該ページのURLをコピペしてTweetしないといけないけど、Chromeの場合は拡張機能を使えばワンクリックでTweetできる。以前はSafari右上のボタンPushでできたんだけど、なぜかなくなてしまった。不便。Chromeは他にも拡張機能が多く重宝する。

僕はメモ魔だ。気がついたら、しょっちゅうメモを取っている。神に鉛筆で書くのが好きなのだけれど、保存性と検索性を考えるとデジタルでメモっておいた方が楽な面もあるから、活用している。(ちなみに、紙と鉛筆は、アイデアを考える時は必ず使っている。)
試行錯誤した結果、落ち着いたのが、Chrome+Keepの組み合わせだ。

使い方はとてもシンプル。
気になるページを見ていたら、ChromeのメニューバーにあるKeepのアイコンをクリックするだけ。素早くメモ作成画面がオーバーラップ表示される。おぉ、これはとても便利だ。特に、すぐに立ち上がるところが重要。なぜなら、僕はせっかちだから。

しかもタグ付けもできる。素敵。

まだ使い始めて間もないので、これである程度運用してみる。
これを機に、Googleが出しているサービスを使う率が高くなるんだろうなぁ…と考えている今日このごろ。

WordPress plugins I installed.

I installed my WordPress Blog, I mean this!, below.

  • BackWPup (to backup WordPress files)
  • Google Analytics for WordPress by MonsterInsights (to analyze the access of my blog)
  • Feed Them Social (to feed my tweet)
  • Instagram Feed (to feed my Instagram)

These suit me now.

DTI, Serversman (VPS) で、PHP5.4→7.3へアップデートした時のメモ

ServersmanのVPSを利用している。
最近、VPSを初期化(ブログセット)したが、PHP5.4なので、最新の7.3にアップグレードした。
少し手間取ったので、自分メモだけど、投稿。
誰かの糧になるのなら、幸い。

PHP環境

<以降前のPHP環境>
php-common-5.4.16-23.el7_0.x86_64
php-pdo-5.4.16-23.el7_0.x86_64
php-xml-5.4.16-23.el7_0.x86_64
php-5.4.16-23.el7_0.x86_64
php-cli-5.4.16-23.el7_0.x86_64
php-gd-5.4.16-23.el7_0.x86_64
php-mysql-5.4.16-23.el7_0.x86_64
php-mbstring-5.4.16-23.el7_0.x86_64

<以降後のPHP環境>
php-common-7.3.6-3.el7.remi.x86_64
php-cli-7.3.6-3.el7.remi.x86_64
php-pdo-7.3.6-3.el7.remi.x86_64
php-gd-7.3.6-3.el7.remi.x86_64
php-mysqlnd-7.3.6-3.el7.remi.x86_64
php-xml-7.3.6-3.el7.remi.x86_64
php-json-7.3.6-3.el7.remi.x86_64
php-mbstring-7.3.6-3.el7.remi.x86_64
php-7.3.6-3.el7.remi.x86_64

実際の作業コマンドなど

  1. yum install epel-release
  2. rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  3. yum update –enablerepo=remi,remi-php73 php php-pdo php-mbstring php-common php-cli php-mysql php-xml php-cli php-gd php-mysql
  4. 「Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again」というエラー発生
  5. /etc/yum.repos.d/epel.repo で、Path変更(参考: http://d.hatena.ne.jp/C_6B4A2B/20130427/1367073209 )
  6. 再度実行→
    yum update –enablerepo=remi,remi-php73 php php-pdo php-mbstring php-common php-cli php-mysql php-xml php-cli php-gd php-mysql
  7. 完了
  8. > php -v
    PHP 7.3.6 (cli) (built: May 28 2019 09:32:59) ( NTS )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.3.6, Copyright (c) 1998-2018 Zend Technologies 
  9. > rpm -qa | grep php
    php-common-7.3.6-3.el7.remi.x86_64
    php-cli-7.3.6-3.el7.remi.x86_64
    php-pdo-7.3.6-3.el7.remi.x86_64
    php-gd-7.3.6-3.el7.remi.x86_64
    php-mysqlnd-7.3.6-3.el7.remi.x86_64
    php-xml-7.3.6-3.el7.remi.x86_64
    php-json-7.3.6-3.el7.remi.x86_64
    php-mbstring-7.3.6-3.el7.remi.x86_64
    php-7.3.6-3.el7.remi.x86_64

久々にコマンド叩いた。気持ちいい。
4のエラーには、リポジトリのPathを変更してやればOKということが分かって、勉強にもなった。