DEVGRU

プログラミングと競馬予想について書きます

AtCoder Grand Contest 019 に参加してみた感想

先程まで、AtCoder Grand Contest 019 に参加していました。

agc019.contest.atcoder.jp

結局、A, B まで解けたものの、Cの途中で時間切れ、D以降は問題文すら読んでない状況です。

開始直後に宅内のネットワークが落ちたのが痛かった。

以下、各問題の反省です。

A問題

それほど難しくなく、素直にナップザック問題でした。

前回の反省から、サンプルの入出力でチェックしてから提出していたんですが、 どうやら整数で除算するべきところを小数点で除算してしまったようで、一度Wrong Answerで蹴られてしまいました。 2回めの提出でAcceptされました。

B問題

きちんとサンプルが通って計算量もメモリ使用量も爆発しないアルゴリズムにたどり着けたんですが、 テストコードのオーダーを1桁少ない値で作ってしまい、提出したらTime Limit Exceeded で蹴られました。 気づくまで首をかしげていました…

それに気づいてから処理の最適化を行ったんですが、 提出をAのまま出す失敗を2回、print()文を抜き忘れるのを1回してしまい、Wrong Answerで蹴られてしまいました。

提出前に確認をする落ち着きが必要ですね。

C問題以降はサーバが過負荷で問題も解答もダウンロードできず、待ちの状態です。

前回も使った以下のPython3コードですが、今回も大活躍でした。

def read_line(*types): return [f(a) for a, f in zip(input().split(), types)]

都合が付けば、次回もまた参加したいと思います。


プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

オンラインジャッジではじめるC/C++プログラミング入門

オンラインジャッジではじめるC/C++プログラミング入門

機械学習環境をAnaconda使わずに作ってみる(Ubuntu 16.04)

前記事で書いたとおり、Anaconda でバシッと色んな物が入って嬉しいんですが、一方でAnacondaを使わずにそれをするにはどの程度の労力がかかるのか、試してみたいと思います。

team-6.hatenablog.jp

team-6.hatenablog.jp

事前設定

  • OS は Ubuntu 16.04 64bit
  • build-essential,gitは導入済み。
  • scikit-lean, Pandas, tensorflow, matplotlib, Jupyter Notebook を使えるようにする。

インストール

TensorFlow, Jupyter Notebook 以外

sudo apt install python3.5 python3-pip python3-sklearn python3-matplotlib python3-pandas

TensorFlow

Installing TensorFlow on Ubuntu  |  TensorFlow の通りに進めます。

sudo apt-get install python3-pip python3-dev python3-virtualenv
virtualenv --system-site-packages -p python3 my-tensorflow
source my-tensorflow/bin/activate
easy_install -U pip
pip3 install --upgrade tensorflow 

MUSTなのはapt-getpip3ですね。

補足

AnacondaもTensorFlowはデフォルトで入ってなくて、conda install tensorflowが必要でした。 なので、TensorFlowに関してはAnaconda と手間はそんなに変わらないかも。

Jupyter Notebook

以下の通りに進めます。

jupyter.org

pip3 install --upgrade pip
pip3 install jupyter

こっちもMUSTは2行目だけですね。

問題?

私がUbuntu 16.04を使ってしまっているせいで、Pythonのバージョンがちょっと古い(3.5)です。 OSアップデートするか、pyenv等のインストーラで3.6.2を入れればいいのですが、 後者は.debパッケージが使えなくなりmatplotlibのリビルドが必要になりそうです(試していない、実はいける? 誰かおしえて)。

Installing — Matplotlib 2.0.2 documentation

また、aptから入れたパッケージのバージョンがちょっと古い(scikit-learnが0.17)です。 これはpipから入れれば問題ないのか…

感想

何も考えずに一発でいろいろ入るAnacondaはやっぱり便利(別記事で書いたトレードオフがあるにせよ)。 怠惰バンザイ。

一方で、試したインストール方法も最適化の余地はあるので、 インストーラみたいなの作っておきたい気もする。


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

入門 Python 3

入門 Python 3

Anacondaの利用は是か非か?(またはそれでも私がAnacondaを“今“使う理由)

先日の投稿で、少しフィードバックをいただけた(ありがとうございます!)ので、それに対する反応です。

team-6.hatenablog.jp

フィードバックその1

コメント欄より。

引用されていたので反応しておきますと、こういう理由からAnacondaもいまは問題があると思っています。 http://ymotongpoo.hatenablog.com/entry/2017/02/02/182647

一次情報含め非常に詳しく書かれていますが、 要約すると、パッケージングにデフォルトのwheelではなく、独自のcondaを用いているAnacondaはデフォルトに歩み寄って欲しい、というお話です。

これについてはおっしゃるとおりで、wheelでできることをわざわざ別のパッケージシステムを構築してしまっているのはエネルギーの無駄ですね。 wheel一本になれば嬉しい人は多いはず。

フィードバックその2

今Pythonで機械学習・ディープラーニングする環境を作るならpyenv系一択だよね(※個人の感想です) - DEVGRU

Pythonで機械学習っぽいことやってるけどvenvとpipで必要なもの全部動いてるし環境のメンテに手間もかかってない。MacとLinuxで同じようにできてる。Anacondaが必須という前提に同意できないのでそもそも本題に入れない…

2017/08/23 23:08
b.hatena.ne.jp

Anaconda が機械学習に必須、という前提に少し乱暴なものがあるのは事実です。そのあたりはあの記事は雑でしたね。 確かに、numpyやscikit-learn, TensorFlow、Keras、matploblib、Jupyter Notebook があれば機械学習やディープラーニングについて大抵のことはできます。

それでも“私”が“今”Anacondaを使う理由

何も考えずとも必要なものの多くがすぐに使える状態で入ってきてくれるから、でしょうか。怠惰ですね。

パッケージシステムに問題がありますが、でも直近は困りません。

Anacondaじゃなくても機械学習やディープラーニングはできます、でもAnacondaのほうが何もせずともいろいろ入ってくるのでお得です。

特筆するべきはNumba とmatplotlibです。Numbaは@jitつけた関数を高速に実行してくれます。

github.com

依存ライブラリがあるためか、

The easiest way to install numba and get updates is by using the Anaconda Distribution: https://www.continuum.io/downloads

と、公式がAnaconda使うと楽だよ、と言ってしまっており、実際その下を見ると少々面倒なインストール手順となっています。

パフォーマンスが必要な場面でスッと@jitが使えるのは嬉しいです。

また、matplotlibも事情は同じのようです。

Installing — Matplotlib 2.0.2 documentation

こちらはOSのパッケージツールでもインストールはできますが、Anacondaはそれすら不要です。

いちいちインストールしなくてもいいなら、その浮いた手間で、本当にやりたいことに時間を割くことができます。

本当にみんながほしいもの

みんなが本当に欲しいものは、実行すれば必要なものが全部入るrequirements.txtや、またはwheelベースでコミコミのPythonディストリビューション、 もしくは私が想像できていないソリューションがあるかもしれません。

ただ、それらは現状は見当たらず(あったら教えて!)、結局、多少の問題を認めつつも“今”はAnaconda(とpyenv)を使ったり勧めたりするわけです。

あと1年もすればAnacondaよりもっと問題の少ないソリューションが出てくると思います。出てくるといいな。

蛇足

以下の本もPythonのインストールはAnaconda+pyenvになってました。

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

やはり、説明・手順が簡単なことは価値なんだと思います。

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

入門 Python 3

入門 Python 3

詳細!Python 3 入門ノート

詳細!Python 3 入門ノート

実践 Python 3

実践 Python 3