kerneltyu’s blog

理系学生です.

【メモ:本】Tensorflow活用ガイドのサンプルコードで躓いた時の対処

機械学習アプリケーション開発入門TensorFlow活用ガイドの4章 自然言語処理サンプルコードWindows上で動かそうとしたときに詰まった個所とその対処法について残します.4-3文書の分類のコードについてです.

環境

エラーとその対処

Traceback (most recent call last):
  File "classify\preprocess.py", line 164, in <module>
    exit(main(sys.argv[1:]))
  File "classify\preprocess.py", line 150, in main
    args.valid_samples
  File "C:\Users\kernel\Miniconda3\envs\tensorflow\lib\random.py", line 318, in sample
    raise ValueError("Sample larger than population or is negative")
ValueError: Sample larger than population or is negative

サンプルが適切じゃない旨のエラー,確認してみると,正しくデータを入力できていなかったみたいです.問題は54行目あたりのdata_generatorメソッドへの引数であるvalid.pathがすべてNaNになっているのが問題でした.さらに調べると

df.reindex([np.random.permutation(df.index)])

この命令後にdfの要素がすべてNaNになっていました.これは,以下のように変更することで改修できました.

df.reindex(np.random.permutation(df.index))

np.random.permutation(df.index)でndarray型が返ってくるにも関わらず多次元リストにして渡していたのが良くなかったみたいです.ここを直すと次は以下のようなエラーが返ってきました.

Traceback (most recent call last):
  File "classify\preprocess.py", line 165, in <module>
    exit(main(sys.argv[1:]))
  File "classify\preprocess.py", line 147, in main
    save_data(data_generator(train.path, train.label), train_output_path)
  File "classify\preprocess.py", line 67, in save_data
    for x, y in generator:
  File "classify\preprocess.py", line 57, in data_generator
    for line in i_:
UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 4: illegal multibyte sequence

うん,Windows特有のやつですね.Windowsはファイルを読み込むときに指定が無ければ,自動でcp932に変換されるらしいので,utf-8を指定してあげなければなりません.

qiita.com

data_generatorメソッド内のopenメソッドに指定がなかったので,以下のように修正.

with open(path, encoding=ENCODING) as i_:

これで無事に動きました.

今更ながら方策反復(Policy iteration)を勉強(実装)してみた

 こんばんは,大学院に進学してから本格的に機械学習の勉強をし始めました.その学習記録を残そうかなと思います.まぁ,自分で実装したアルゴリズムとかだけを書いていくつもりです.
 今回は,強化学習をやっている人なら誰しも目を通したことがあるはずのSutton本から方策反復(※方策勾配法じゃないよ)の説明と実装を共有しようと思います.なんで方策反復かというと調べてパッと出て来なかったっていう理由です(笑)
 強化学習の基礎はわかっているという前提で話を進めていきます.強化学習については調べたら色々Webページが出てくるので,それを見てください.下記の記事なんかいいじゃないでしょうか?方策反復(Policy iteration)についてざっくり触れられています.

qiita.com

方策反復(Policy iteration)とは?

 有限MDP(マルコフ決定過程)が与えられた時に,方策の評価と方策の更新を繰り返し行い,最適な方策を得るアルゴリズムのことです.動的計画法の一種で,計算結果をメモリで保持しながら繰り返し計算を行います.現在の一般的な強化学習は,MDPに関する情報を完全には必要としないのですが,今回の方策反復はMDPの情報を完全に必要とします.Model-basedな手法であるとも言えます(最近よく聞くModel-basedな手法はモデルの完全な情報が所与ではなく,モデル自体の学習と方策の学習の両方を行うので,区別してください).有限MDPの情報を完全に必要とするということがどういうことかというと,報酬関数 R(s,a,s') と状態遷移関数P(s,a,s')が完全にわかっている(入力として与えられる)ということを意味しています.これらの情報が自明であれば,動的計画法を用いて最適な方策を求めることができます.
 今回はエピソード的タスクで,特殊な状態(終端状態)をもつタスクを考え,強化学習の文脈で(昔は)よく使われた迷路問題を扱います.

用語の定義

 アルゴリズムの説明の前に今後使用する変数や関数を表す表記,タスクの定義をしておきます.まず,変数や関数の定義は以下の通りです.

表記 意味
 a \in A 行動集合Aに含まれる行動
 s \in S 状態集合Sに含まれる状態
 s' \in S^{+} 終端状態を含む状態集合[tex: S^{+}から得られる状態
 r_{t} tステップで得られた報酬
\pi(a|s) 状態sで行動aを取る確率.これが方策
\mathbb{E}_{\pi} 方策 \pi の元での期待値
\(v\) 状態価値関数

 次に,タスクについてです.扱う迷路問題は以下のような迷路です.Sutton本に書かれているのと同じ形式です.

f:id:kerneltyu:20180610235202p:plain

 上図に示した通り,行動は上下左右の4つが可能であり,各マスが状態を示しており,1-14が各状態の識別子として割り振られています.色付きのマスが終端状態であり,図には書かれていませんが,それぞれ0と15とナンバリングをします.Sutton本では,全ての遷移(状態からの行動)に対して-1の報酬が獲得されるという設定です.しかし,今回は終端状態への遷移で+1の報酬が獲得され,それ以外は報酬が獲得されないという設定にします.どちらの報酬設定でも良いのですが,ちょっと変えてみました.方策は決定的であるとします.
 さて,この迷路問題タスクにおいてそれぞれの(終端状態以外の)状態から終端状態に到達するまでの最短経路を導く方策を導きます.

方策反復(Policy iteration)の手続き

 方策反復の具体的な手続きについて見ていきます.早速いかに,疑似コードを示します.Sutton本からの引用です.

f:id:kerneltyu:20180611194211p:plain

 方策反復は大きく3つのステップに分かれます.初期化(Initialization)と方策評価(Policy evaluation)と方策更新(Policy improvement)です.初期化では,状態価値関数と方策の初期化を行います.実装ではどちらとも \mathbf{0} で初期化しました.方策反復では,方策の更新がされなくなるまで繰り返し,方策評価と方策更新を繰り返します.方策評価では,更新量 \delta\theta よりも小さくなるまで,全状態の状態価値関数 V(s) の更新を繰り返し行います.方策更新では,すべての状態に対して,行動の価値 \sum_{s',r} p(s',r|s,a)[r+\gamma V(s')] が最も大きい行動を状態 s における行動aとして更新を行います.

方策評価とは?

f:id:kerneltyu:20180611214141p:plain
 方策評価とは字面の通り,方策を評価する手続きのことを指します.方策の評価は,状態価値関数\(V(s)\)を更新することによって行います.なぜ状態価値関数の更新が方策の評価になるのかというと,方策が状態価値関数によって決定づけられるからです.これについては方策更新の項目で説明をします.
 ここでは,方策評価における状態価値関数の導出について説明します.そもそも強化学習は期待報酬を最大化するような方策を学習することが目的である枠組みです.期待報酬は,状態価値関数V(s)や行動価値関数Q(s,a)(いわゆるQ値)の形で表されます.ここで方策\piで得られる状態価値関数をv_{\pi}(s)とすると,
$$ \begin{align} v_{\pi}(s) &= \mathbb{E}_{\pi}[G_t|S_t=s] \\ &= \mathbb{E}_{\pi}[R_{t+1}+\gamma G_{t+1}|S_t=s] \\ &= \mathbb{E}_{\pi}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s] \\ &= \sum_{a} \pi(a|s) \sum_{s',r} p(s', r|s,a)[r+\gamma v_{\pi}(s')] \end{align} $$

 上記のような式を得ることができます.ここで,決定的でない方策\pi(a|s)の場合は確率値をとるのですが,今回は決定的な方策\pi(s)を考えるので,導出した式は以下のように書き変わります. $$ \begin{align} v_{\pi}(s) &= \mathbb{E}_{\pi}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s] \\ &= \sum_{s',r} p(s', r|s,a)[r+\gamma v_{\pi}(s')] \end{align} $$  期待値計算で行動の確率値を考える必要がなくなったということです.この式が先ほど示した状態価値関数の更新で用いられている式を表しています.ここでこの更新の意味を考えてみると方策を更新する前の状態価値関数を更新後の方策\pi(s)を取った時に得られる状態価値関数に更新するために繰り返し計算していることになります.

方策更新とは?

f:id:kerneltyu:20180611214145p:plain
 方策更新は,先ほど説明した方策評価で得られた状態価値関数v_{\pi}(s)でgreedyになるような方策に更新する手続きです.ここで,行動価値関数について少しふれておきます.行動価値はある行動a をとった時の期待報酬を表しています.状態価値との違いとしては,行動aをとった時というところです.状態価値は,状態sでとれる行動すべてを考慮しなければなりませんでしたが,行動価値は,状態sで行動aを取った時のみを考慮します.すなわち状態sで行動aを取った時の期待報酬を表しています.この行動価値によって行動aがどれほど良いかを測ることができます.行動価値関数q(s,a)を以下に示します. $$ \begin{align} q_{\pi}(s,a) &= \mathbb{E}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s, A_{t}=a] \\ &= \sum_{s',r} p(s', r|s,a)[r+\gamma v_{\pi}(s')] \end{align} $$ 実はさっき示した決定的な方策をとった時の状態価値関数とほとんど同じなんですよね(笑).でも,行動aか方策\pi(s)かが違います.よく見てください.この行動価値関数が,方策更新では使われます.方策を更新している個所を見ると,状態sにおいて可能な行動aの行動価値関数で最も大きい行動価値を得ることのできるaを方策として採用しています.
 これでなんで最適な方策が得られるのとかはSuttonの本を読んでください.参考文献で示します.

実装コード

実装では,下記のページでOpenAiGymをベースにした迷路問題を用いていたのでそれを参考にさせていただきました.というよりここで方策反復が触れられてなかったからこのブログ書いたまである.

qiita.com

コードは僕のGitHubにあります!

実行結果

f:id:kerneltyu:20180611230343p:plain

 上記のような結果が得られるかと思います.迷路問題と初期の状態価値関数,初期の方策,学習後の状態価値関数,学習後の方策を示しています.学習後の状態価値関数を見ると終端状態に近いほど高い状態価値が得られていることがわかります.学習後の方策ではどの状態からスタートしたも終端状態に最短距離で到達することが確認できると思います.
 コードを少しいじれば5×5迷路問題と拡張できると思います.更新で全状態と全行動に対して計算を行うので少なくともO(|S||A|)の計算量がかかるので迷路のサイズをあまり大きくしすぎると計算が終わらないと思います.

おわりに

以上, 方策反復について解説してみました.疲れた...けど楽しいですね!今後も書いていけたらなと思います.間違いとかあれば気軽に指摘してください(^^)b

参考文献

[1] Richard S. Sutton and Andrew G. Barto, Reinforcement Learning: An Introduction Second edition, http://incompleteideas.net/book/bookdraft2017nov5.pdf, 2018/6/11参照.
[2] @neka-nat, 逆強化学習を理解する, https://qiita.com/neka-nat@github/items/aaab6184aea7d285b103, 2018/6/11 参照.

TensorflowでFutureWarning: Conversion of the second argument ... が出た時

お久しぶりです.

Tensorflowを本格的に始めようとしてTensorflowをインストールをしました. インストールできたはいいものの,FutureWarningが出てしまいました.実行には何の問題もないんですが,出力が非常に見にくい! 調べて見たら,issueに改善方法が書かれていたので,メモ代わりにここに残しておきます.出たFutureWarningが下記です.


/Users/kerneltyu/anaconda3/envs/RL/lib/python3.6/site-packages/h5py/__init__.py:34: 
FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`. from ._conv import register_converters as _register_converters
    

まぁ,h5pyに問題があるのは一目瞭然で,h5pyのissueを見に行ったら,解決策が載っていました.


pip install h5py==2.8.0rc1
    

こいつでh5pyのバージョン2.8.0rc1をインストールしてあげれば,FutureWarning出なくなりました.

Anaconda仮想環境構築からOpenAi Gymのフルインストール

前回にOpenAiGymの導入でのエラーについて書いたが、今回はAnacondaで作成した仮想環境上でフルインストールを行いました。 まずAnacondaで仮想環境を作成して、activateする手順です。 仮想環境は、pythonのバージョンとかライブラリの管理が楽になるので使います。

//仮想環境の構築
Orion:~ kerneltyu $  conda create -n RL python=3.6 anaconda
//仮想環境RLのactivate
Orion:~ kerneltyu $ source activate RL
(RL) Orion:~ kerneltyu$
(RL) Orion:~ kerneltyu$ conda info -e
# conda environments:
#
RL                    *  /Users/kerneltyu/anaconda3/envs/RL
root                     /Users/kerneltyu/anaconda3

これで仮想環境の構築とactivateはOK! これからOpenAiGymの導入をしていきます。 まず、cmakeをインストールする。(インストール済みなら省略してください)

yoshihiro-kato.blogspot.jp

上記の通りにインストール! 次にここを参考に github.com

(RL) Orion:~ kerneltyu$ cd /Users/kerneltyu/anaconda3/envs/RL/bin
(RL) Orion:bin kerneltyu $ git clone https://github.com/openai/mujoco-py.git
(RL) Orion:bin kerneltyu $ cd mujoco-py
(RL) Orion:mujoco-py kerneltyu $ sudo python setup.py install
(RL) Orion:mujoco-py kerneltyu $ cd ..

これでmujoco-pyのインストール完了 次にgymのフルインストールをします。

(RL) Orion:bin kerneltyu $ brew install cmake boost boost-python sdl2 swig wget
(RL) Orion:bin kerneltyu $ git clone https://github.com/openai/gym
(RL) Orion:bin kerneltyu $ cd gym
(RL) Orion:gym kerneltyu $ sudo pip install -e .[all]
FileNotFoundError: [Errno 2] No such file or directory: '/Users/kerneltyu/anaconda3/envs/RL/lib/python3.6/site-packages/__pycache__/cython.cpython-36.pyc'

こんなエラーが出たら

(RL) Orion:gym kerneltyu $ sudo pip install -e .[all] --ignore-installed Cython

としましょう。これで回避できるはずです。 以上でOpenAiGymのフルインストール完了です。

論述とはなにか?

久しぶりの文系科目の授業のレポートで論述しなさいという課題を出されました.論述ってなんだっけとなり調べたのでメモ代わりにここに書いておきます.

 

論述とは?

あるテーマが与えられたとき、そのテーマに対する考え方の
事例を要約して紹介し、それに対して、自分の考え方を説明し、
順序立てて筋道を論理的に立てていき、最後に結論を述べる。
論述では自分の意見の比重が重くなる。

detail.chiebukuro.yahoo.co.jp

 

つまりは,自分の意見を論理的に述べることですね.

 

論述で示すべき項目

以下の順番で示していけばいいと思います。

  1. 自分の意見
  2. 問題を理解したこと
  3. 問題に関する背景知識を持ってるか
  4. 問題に回答するために事実や理論などを論理的に関連付けること
  5. 結論

 

http://www.ne.jp/asahi/socialpower/yimai/howto/ronjyutu/ronjyutu.html

 

さて、自分のレポートを書いていきますか...。

 

研究者になるために必要なスキル

最近,活躍中の研究者の方々と話す機会が頻繁にあってそこで聞いた話をまとめておきます.

研究者という仕事について

  • 仕事内容は研究!

当たり前だけど,研究者の仕事は研究をすること.業績を残すためや自分の興味のために研究を進めている.研究以外では,所属する機関にもよるが,学生の指導や授業がある.私立大学だと授業数や配属学生数が多くてなかなか研究に費やす時間が取れないことも.

理学系研究者の多くは研究所で研究するよりも家で仕事をし,週1くらいでしか研究所には来ないらしい.工学系研究者の多くは基本的に研究所に来て仕事するらしい.大学に所属しているとなかなか無理そうだけど.

  • 昇進にかかわるのはやっぱり業績!

若手研究者のうちは基本的には任期付きで雇われることになる.任期はだいたい3年ほど.業績を残すことで昇進できるみたい.

  • 研究者とは中小企業の社長のようなもの!

予算獲得(営業)・管理,開発,基礎研究,教育,これらのことを基本的に一人ですることになるので,中小企業の社長のように広くできるようにならなければならない.

研究者になるためのスキル(素質)

  • レールの敷かれた人生を避けること

修士を修了後,就職するか博士課程に進学するかの選択の際,このまま周りと同じように就職してもいいのかと疑問を持ったそう.就職したらある程度は昇進して,ある程度は稼げそうだけど,つまらないなと感じたらしい.修士まで出て就く仕事内容がSEだとなんのために修士まで出たのかわからない.もっと知的なことをやりたいと思った.あと,SEは人がやるべき仕事なのか(将来的に機械がやるようになるだろう)とも言ってました.

  • 鈍感力

これは,とても大事だと言っていました.これは,研究者になるまでと研究者になってからで必要と言っていました.まず,研究者になるまでは,周りよりも学生の期間が長くなってしまうので,就職した組が昇進していくなかで自分は学生のままで何をやってるんだろうなって感じてしまいます.そこで,どれだけ周りを気にせず鈍感であれるかが精神的な強みになるよう.これまで,博士課程の途中で挫折してしまった人は何人もいるようです.

次に,研究者になってから.2つあります.1つ目はいざ研究で食べていこうとしたときに,研究内容で煮詰まってしまったとき,どれだけ煮詰まっているという状況を鈍感さで乗り切るかだそう.煮詰まっていることに対して敏感になりすぎると精神的にしんどくなるようです.煮詰まっているのに煮詰まっていることに気付かないくらい鈍感になれと言っていました.2つ目は,論文の査読についてです.トップカンファレンスに論文投稿をすると(辛辣な)ありがたい意見を頂くそう.英語が稚拙である,から始まり,A4用紙4枚分ぐらいの査読回答が返ってきます.その時に適度に受け止めることができるかが大事だそうです.あまり落ち込みすぎてはダメ.

  • 文章力・発信力

いくら研究ができても発表できなければ研究しなかったことと同義.発表の形式は基本的には論文,学会です.その時にいかに上手に文章にできるか?いかに上手に発信できるか?が大事と言ってました.

まとめ

研究者とのお話の中で聞いた話や感じたことをここまで書きました.

  • 研究者は自由な働き方ができる
  • 研究者は中小企業の社長のようなもの
  • 研究者に必要な資質は,鈍感力と発信力

OpenAI Gymの導入でOS Error: [Errno 1]が出てしまった

OpenAI Gym

以前から存在は知っていて使ってみたいなと思っていました。今回、輪講で出てきたこともあり輪講内容の理解を深めるためや今後の強化学習のアルゴリズムの勉強のためにもここで導入しようと踏み切りました!

しかし、導入しただけではここには書きません。途中でハマってしまいました。

基礎的なところかもですけど、Mac初心者にとって解決に時間かかる問題でした。

その途中で出たエラーと解決方法についてここに残しておきます。

導入までの流れは公式を見てください!とっても簡単そうです。多分ほとんどの人にとっては簡単。

PCスペック

f:id:kerneltyu:20170418123915p:plain

エラー 

Orion:gym kerneltyu$ pip install -e .

Obtaining file:///Users/kerneltyu/gym

Collecting numpy>=1.10.4 (from gym==0.8.1)

  Using cached numpy-1.12.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl

Collecting requests>=2.0 (from gym==0.8.1)

  Using cached requests-2.13.0-py2.py3-none-any.whl

Requirement already satisfied: six in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from gym==0.8.1)

Collecting pyglet>=1.2.0 (from gym==0.8.1)

  Using cached pyglet-1.2.4-py2-none-any.whl

Installing collected packages: numpy, requests, pyglet, gym

  Found existing installation: numpy 1.8.0rc1

    DEPRECATION: Uninstalling a distutils installed project (numpy) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.

    Uninstalling numpy-1.8.0rc1:

Exception:

Traceback (most recent call last):

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main

    status = self.run(options, args)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run

    prefix=options.prefix_path,

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 778, in install

    requirement.uninstall(auto_confirm=True)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 754, in uninstall

    paths_to_remove.remove(auto_confirm)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove

    renames(path, new_path)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py", line 267, in renames

    shutil.move(old, new)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move

    copy2(src, real_dst)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2

    copystat(src, dst)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat

    os.chflags(dst, st.st_flags)

OSError: [Errno 1] Operation not permitted: '/var/folders/81/gnsty4rn7cl0v5pvwt2xnj1c0000gn/T/pip-4A2FSu-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy-1.8.0rc1-py2.7.egg-info'

 

結構書かれてますが、要はあなたがnumpy-1.8.0rc1をアンインストールする操作は許可されてませんよ〜ことですね。

なので単純にsudoつけてやりました。

 

Orion:gym kerneltyu$ sudo pip install -e .

The directory '/Users/kerneltyu/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

The directory '/Users/kerneltyu/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

Obtaining file:///Users/kerneltyu/gym

Collecting numpy>=1.10.4 (from gym==0.8.1)

  Downloading numpy-1.12.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.4MB)

    100% |████████████████████████████████| 4.4MB 259kB/s 

Collecting requests>=2.0 (from gym==0.8.1)

  Downloading requests-2.13.0-py2.py3-none-any.whl (584kB)

    100% |████████████████████████████████| 593kB 918kB/s 

Requirement already satisfied: six in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from gym==0.8.1)

Collecting pyglet>=1.2.0 (from gym==0.8.1)

  Downloading pyglet-1.2.4-py2-none-any.whl (964kB)

    100% |████████████████████████████████| 972kB 754kB/s 

Installing collected packages: numpy, requests, pyglet, gym

  Found existing installation: numpy 1.8.0rc1

    DEPRECATION: Uninstalling a distutils installed project (numpy) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.

    Uninstalling numpy-1.8.0rc1:

Exception:

Traceback (most recent call last):

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main

    status = self.run(options, args)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run

    prefix=options.prefix_path,

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 778, in install

    requirement.uninstall(auto_confirm=True)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 754, in uninstall

    paths_to_remove.remove(auto_confirm)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove

    renames(path, new_path)

  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py", line 267, in renames

    shutil.move(old, new)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move

    copy2(src, real_dst)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2

    copystat(src, dst)

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat

    os.chflags(dst, st.st_flags)

OSError: [Errno 1] Operation not permitted: '/tmp/pip-Phs4aa-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy-1.8.0rc1-py2.7.egg-info'

 

ダメじゃん...

そこで OSError: [Errno 1] のエラー解決しているページを探しました。そこで見つけたTensorflowの導入でハマって解決している記事を参考にしました。

pikurusux.hatenablog.com

解決策

この記事によると"--ignore-installed program name"のオプションが重要。僕の場合はnumpyだったので"--ignore-installed numpy"のオプションを付与して

"sudo pip install -e . --upgrade --ignore-installed numpy"を実行しました。

 

Orion:gym kerneltyu$ sudo pip install -e . --upgrade --ignore-installed numpy

The directory '/Users/kerneltyu/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

The directory '/Users/kerneltyu/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

Obtaining file:///Users/kerneltyu/gym

Collecting numpy

  Downloading numpy-1.12.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.4MB)

    100% |████████████████████████████████| 4.4MB 249kB/s 

Collecting requests>=2.0 (from gym==0.8.1)

  Downloading requests-2.13.0-py2.py3-none-any.whl (584kB)

    100% |████████████████████████████████| 593kB 809kB/s 

Collecting six (from gym==0.8.1)

  Downloading six-1.10.0-py2.py3-none-any.whl

Collecting pyglet>=1.2.0 (from gym==0.8.1)

  Downloading pyglet-1.2.4-py2-none-any.whl (964kB)

    100% |████████████████████████████████| 972kB 762kB/s 

Installing collected packages: numpy, requests, six, pyglet, gym

  Running setup.py develop for gym

Successfully installed gym numpy-1.12.1 pyglet-1.2.4 requests-2.13.0 six-1.10.0

 

上手くいきました。

ハマった時に参考にしていください