あぴすの雑記帳

某理系大学に通う自堕落大学生が日頃思っていることをあれこれ垂れ流すだけのほぼ自分用ブログです。

投資判断支援AIを作ってみた

就活終わって暇になったので証券口座を開設したり、投資や簿記の勉強をはじめました。 もう研究なんてしなくていいってことです。

さて、今回は投資の素人が良く考える「全部判断してくれるAIみたいなのないかなぁ」っていうのを愚直に作ってみました。

完全に素人なので、ドメイン知識を活かせないとここまで辛いか…って感じで精度があまり出なかったのが印象的です。勉強します。

 

パフォーマンスについて

早速気になるパフォーマンスですが、以下の通りになりました。 f:id:apissP:20200427184557p:plain

しょっぱいですね。4年で10万円ちょっとの利益しか出てないので利回りは2.6%ってとこでしょうか? まぁ4年間で74回しか取引を行っていないのにここまでの利益が出せるなら十分人間以上ってことで良いでしょうか()

  予測-リターンの散布図は以下の通りになっています。(正規化した上で±3σ以上の異常値は省いて表示しています)

X軸が予測値、Y軸がリターンです。若干正の相関が見られます。

f:id:apissP:20200427184943p:plain  

-σあたりの予測が怪しいですが、今回はそこは予測に使用していないのでまぁ良しとしましょう。

次に、各特徴がどの程度予測に影響を及ぼしているのかSHAPを用いて解析します。 f:id:apissP:20200427205320p:plain

このように予測に重要な数値が表示されました。 (本来であれば変数名が表示されるはずなのですが、どうにもドキュメントが見当たらずにこのような形式になりました)

数値を追っていくとどうやらボリンジャーバンドあたりを詳しく見ているようです。

 

データについて

今回はお試しということで日経225のデータを利用しています。

2005年から2014年のデータを学習に、 2016年から2019年のデータをモデルの評価に使用しています。

以下の簡単なコードで入手可能です。

import pandas_datareader as web
nikkei = web.get_data_yahoo("^N225",
                            start = "2005-01-01",
                            end = "2014-12-31")

   また、予測にはこのデータだけでなく、他のテクニカル指標も用いています。 用いているのは単純移動平均ボリンジャーバンドMACDRCIです。 この他に日付データ(曜日、月など)も循環指標として利用しています。

テクニカル指標はやろうと思えば自分で計算できるのですが、便利なライブラリがあるのでこのように計算します。

import talib
nikkei['sma25'] = talib.SMA(nikkei["Close"], timeperiod=25)

ただまぁ、自分で書くとどのような指標なのかが理解できるので個人的には一旦自分で書いた方が良いんじゃないかなぁとも思います。

また、Lassoなどでは時系列の表形式データが入力できないのでこれらのデータは1次元にほどく必要があります。 多次元時系列データの特徴量抽出はどうやって処理してあげれば良いのか悩みますね。 一応tsfreshを利用してみたのですが、どうにも上手く動作しませんでした(公式ドキュメントどうりに動かしてもダメとは…?仕様…?)

モデルについて

モデルはなんてことのないLSTMを使用しています。(詳しく言うとLSTM+BatchNorm+Denseです。BatchNormを入れると安定しますが、逆に層を増やすと安定しませんでした。)

ちなみに、これと同じ程度のパフォーマンスをLassoで出せます。

変数の重要度がLassoであれば一発で分かるのですが、SHAPを使いたかったのでこちらにしました。

この他にベースラインとしてsklearnで用意されているものに加えてLGBMなど様々なモデルを利用しましたがどれもイマイチでした。 結局単純なモデルが一番ですね。

取引戦略について

1σ~3σの値が出力された場合のみ取引を行います。そのために取引回数が非常に少ないです。(年平均18回なので一ヶ月に1~2回です。) また、ホールドする概念も無いため、その日のうちに必ず売ります。

また、いわゆる空売りは考慮していませんので、大きな負の値が予測されても特に何も行いません。

ここらへんの戦略も今後詰めていく必要がある部分ですね。

今後について

とりあえずデータを増やします。 日経平均だけではどうしようもないので、ファンダメンタル分析も交えつつ(できればやりたくない)日本市場の様々な企業のデータを学習させようかと思います。 また、利用するテクニカル指標を増やしつつ、今回上手く動作したLSTMとLassoに関して変数を分析し、有用な指標を見極めていければと思っています。

ただ、とりあえず研究もやらなきゃなので、社会人になってからの運用をめざしてのんびりやっていこうかと思います。

間違いの指摘やアドバイス大歓迎なのであったら連絡ください。よろしくお願いします。

就職活動が終わった

先日いわゆる内々定をいただき、無事に就活を終えることができた。

ということでなんとなく何をやってきたのかの記録とか反省とか感想とか書こうかと思う。

 

 

開始から終了までの流れ

  • 2019年7~8月
    夏期インターンシップ
    申し込んだ企業5つぜーんぶ落ちた。
    何がダメだったのかと思ったけど、確実に一回も推敲せずに提出したESが悪いと思う。

    f:id:apissP:20200421222817j:plain




  • 2019年10~11月
    ハッカソンに出場した。
    ここで色んな方と名刺交換をしたりしたけど、コミュ障すぎて結局2社としか連絡取らなかった。
    ちなみにそのうち1社は特別選考とか言って1月くらいに選考があったけど落ちた。特別ってなんだ。説明会とかに参加してたのもこの頃だと思う。

  • 2019年12月~2020年1月
    インターンラッシュ。
    3社くらいの短期(3日とか)インターンに参加した。長期インターンも2社合格してて、片方は残念ながら行けなかったけれど2週間も時間取られるので長期インターンは行かない方がいいなぁって思いました。

  • 2020年2月
    ES提出ラッシュ。
    ESの内容とか全然考えてなかったし2月頭からESの内容は考えたほうがいい。結局ESを提出したのは7で、ES落ちは1社だけだった。インターンを断った会社だったのでまぁしゃーなしかなぁ。

  • 2020年3月
    ここが佳境だった。
    3月になると2日か3日に一回何かしらの就活イベントが発生していた。(面談、面接、説明会、SPIなどなど)

    3月は外資系の内定が出るので、一応このタイミングで内定をもらった。
    外資系は2月に終わっていることも多いので外資系を目指している人は1月くらいから真剣に考えたほうがいいかもしれない。あまり詳しくは知らないけど。

    …あと、一週間も旅行に行くのはマジでリスクがあるのでやめとけ。
    面接の日程が丸かぶりしてて、普通に死ぬかと思った。
    最高に楽しいけど。

  • 2020年4月
    3月後半からそうだったけれど、基本的にすべての面接がweb面接になった。
    面接をしたのはESが通った6社中5社で、特別選考に招待されたもう一社を含めて6社の面接を行った。
    (ちなみに特別選考はまた落とされた。特別ってなんだ)
    この内の1社から内々定の電話をもらったので就活終了。

 

費用

 あまり意識してなかったけど、交通費は普通に過ごしているより多くなった。
証明写真とかも意外と高かったりしたので、全体で見ると1万円はかからないくらいなんじゃないかなと思う。(ミスって証明写真を2回撮ったのが大半を占めているけれど)

まぁ東京にいればそんなに就活にお金はかからないなぁと思った。

 

利用したサービス

 これは声を大にして言いたいのだけれど、マイナビやらリクナビは一切使わなかったので登録しないほうがいい。

結局一通も有用なメール来なかったし、逆求人も一生わけわからん企業から一括送信メールが来るので役に立たない。

俺が利用してたのは以下の2つのサービス

 

  • 外資就活ドットコム
    外資就活なんてしねぇよ!って人が大半だろうけど、このサービスは普通に日系企業取り扱っているので、下手に外資系企業が登録されてないサービスより有能かもしれん。

    というか、俺はこのサービスの過去の通過したESを見るためだけに登録した。

    これがなかなか見やすくて最高。会社別に質問内容と実際の回答が掲載されていて、参考にさせてもらった。
    ウチのラボには先輩の就活資料が少ないので非常に役に立った。

    (来年就活の人はここから登録するとアマギフ1000円が6月に貰えます。)


    gaishishukatsu.com



  • Lab Base
    逆求人イベントに参加させてもらった。意外と大企業からも連絡が来るので他の逆求人より良いイメージ。
    まぁ結局役に立ったのかは微妙だけれど、色んな企業と繋がれたので良かったと言えば良かった。アマギフも貰えるしね。

    compass.labbase.jp



  • [番外編]LinkedIn
    逆求人のサービスは色々あるんだけれど、このサービスはガチの逆求人が来る。まぁそもそも逆求人に主眼を置いたサービスじゃない(ビジネス特化型SNS)ので、それはそうという感じか。
    俺が内定をもらった外資系もここからだし、クッソ大企業からも求人が来た。ただ、別に新卒に限ったツールではないので実績が無いとキツそうという印象。

    www.linkedin.com

 

この3つのサービスに共通しているのは「しっかりとメールの量を調整できる」ということ。マイナビだかリクナビだかはなんか知らんがメールやら電話やらが飛んでくる。

 

企業説明会

色々な企業に行けて楽しかった。就活に役に立ったかと言われると微妙なんだけれど、色んな会社の説明を聞いて「へぇ~こんな仕事があるんだぁ」となるのは単純に楽しい。

ただ、それを仕事にしたいと思えるかどうかは別で、そこがなかなか難しいと思う。

 

たまに説明会で質問コーナーがあるのだけれど、この質問コーナーでは具体的にどのような仕事があるのかを聞いておいた方が良いように思う。具体的な仕事のイメージがつかないと志望もクソも無いなぁとすべてが終わってから思ったりした。

 

あと、説明会に2回遅刻したけどあれは良くなかった。

完全にすっぽかした企業はESが通らなかったのですっぽかすのも良くない。

 

ES

ESは本当に困った。マジで何も書けなかった。2月になって「へぇ!こういうこと聞くんだ就活って!」みたいな状態なのはマジでキツかった。

今から就活の人はある程度メタった方がいいかもしれない。

 

 ESよく聞かれた質問は以下のような感じで、それぞれ非常に書くのがキツかった。

  • 志望動機
    そもそも「大企業に入りたい」くらいしか考えてない人間はここでつまずく。本気で志望動機がないのでふわふわしたことを書いたけれど、思いっきり「こういうモノを作りたい!」とか書いた方が印象いいかもしれない。

  • 希望職種
    マジで無い。働きたくない。言われればやるから雇ってくれ。これに関してはめちゃんこ困ったのだけれど、研究か今までの経験に絡めて話すことのできる職種を書くと面接で困らないので良い。
    こうやって希望職種を決めるのは良くないのかもしれない…

  • 強みと弱み
    面接で「弱み…無いですね」とか答えるハメになるのでちゃんと考えたほうがいい。強みなんて正直見つからなかったので「外資就活ドットコム」に載ってたものをパクった。

    弱みは無限に書けるけれど、面接でめちゃくちゃ深堀りされるので「それ弱みか…?ワンチャン強みじゃね…?」くらいのものにしなければいけないのが面倒くさい。
    逆に言うと強みを濃くしていけば弱みにたどり着くのでこっちは意外と書くのが楽だった。

  • 学生時代に頑張ったことガクチカって言うらしい)
    俺はハッカソンあったからいいけど無かったら研究しか書くことない…と思った。
    学部就職した人はホントにすごいと思う。マジで毎日怠惰に過ごしているので書くことがまるで無い。研究しかしてない。
    これからの人はなんかネタ作るのがいいと思う。
    なるほどそれで文系はカンボジアとかに行くのかぁってなった。

  • 研究内容
    これは楽勝。ただ、実は自分の研究は書いて無くて、研究室の研究の中でも理解と説明がしやすいものを選んで使った。同期と被らないように注意はしたけれど。
    説明がしやすい研究じゃないとガチで厳しいと思う。

  • 直面した困難と乗り越え方
    知らねぇよ…。困難に直面したら逃げるくらいしかしてないので研究で頑張ったことを書いておいたけど、たぶん相手が求めているものはそうじゃない気がする。
    そんな普段から困難に直面する機会ってあるんですかねぇ…?

 

 

面接

これがマジで苦手で、本当に志望動機が無いとどこも面接の感触が良くない。どこも似たような質問をされるので対策はできそうだけれど、結局そういうことをやらずに毎回面接でしくじっていた。

っていうか、コロナの影響でカンペ見つつ話せたのは良かったけど、あればバレたりするんだろうか?

  • 自己紹介
    まずは簡単に自己紹介って言われるけど、何分で話すのが正解なんだろうか?っていうか自分で話しててどのくらい時間が経ったのかとかわからん。
    大学と研究内容と普段どんな勉強しているのかくらいしか答えてないけれど、これが正解だったと信じたい。

  • 研究内容
    ESと同じことを話そう。一回ミスって違う研究の話して詰んだのでそういった粗相の無いようにすれば大丈夫だと思う。
    ここで話しやすい研究をESに書くのが大事だと思う。

  • 志望動機
    これに答えられないと詰むので考えたほうがいい。一回「考えてませんでした…」って言ったら落とされた。
    ESで書いたことをちょっと詳しくするだけで良いと思う。

  • 具体的にどのような仕事をしたいか?
    この質問でだいたい詰むんだけどみんな何を答えてるんだろうか。具体的な仕事って全然思いつかないんだけど。みんなOBとかにどんな仕事してるのかとか聞いたりするんだろうか。
    この質問されたら俺は絶対に「もうちょっと具体的に言ってよ」と言われるのでマジで具体的に考えたほうが良いと思う。

    インターンや説明会で先輩社員と座談会!みたいなことをしたときにこういうことを聞けば良かった。

  • 志望部門以外ならどんな仕事をしたい?
    これも聞かれると詰むので対策した方がいいなと思った。部門が全く違う商品名出したら微妙な顔されたのでやりたい仕事を2つ見つけておかなければならない。

    …ただ、志望理由すら書くのがしんどい人にはなかなか難しかった。

反省と感想

全体を通して思ったのが、興味を持つってことは重要だなぁということ。
志望理由すら考えずに面接に行って、企業の人には本当に申し訳ないことをしたなと思っている。

ただ、本気でやりたいことが見つからなかったのも事実で、なんとなく「説明会行きまくればやりたいこと見つかるでしょ」とか考えないほうがいいなと思った。

f:id:apissP:20200421225132j:plain

 

普通に研究内容に沿った企業にESを出せばいいのだけれど、俺の場合は合致する企業がそう多くなかったのでこうなってしまったという側面もあるのかなと思う。

 

内々定を頂いた企業に関しては唯一行きたいなぁと思ってた企業なので、ESやら面接やらで結局上記のつらさはあまり感じなかった。

研究内容とも相性が良いし、何より雰囲気が良かった。

本当にここに落ちていたらどうなっていたのか想像もしたくない。

 

とりあえず無事に終わって良かった。もう二度とやりたくない。

say zoo ―unlimited 製図 works―

 

はじめに

この記事はなに?

この記事はUECアドベントカレンダー18日目の記事です。17日目の記事はこちら
アドベントカレンダーなんて参加するの初めてだ。オラワクワクすっぞ。
 
ネタも決められない私のためにわざわざアンケートに回答してくれたみなさん、ありがとう。
 

 

 
…まぁこうなるよね

 

ちなみにディープラーニング使った何かは「谷間を自動検出して水玉コラを作る」っていうテーマだったんだけど、昨日やってみて全然ダメだったし製図になってよかった...

 

 

注意

ご存知の方もいるかもしれないですが、私、この科目のTAやってます。
TAしか知らない情報や、愚痴を期待している人はこの記事読んでる時間でラブプラスとかやった方が楽しいと思う。いや、この記事よりラブプラスの方が楽しいだろ。ラブプラスやれ。やったことないけど。
そもそもTAしか知らない情報なんて出席情報か答えの図面くらいな気がs…
 
 

心構え

この記事は以下の心構えを持って見てください。
それでは皆さんご唱和ください。
さんっはいっ!
 
 
 

製図はクソ!!!!!!!

 
 
 
 

あなたは誰?

今は亡きM科出身の生え抜き電通大大学院生です。
普段は製図と全く関係の無い、画像処理の研究をしているので、M科で機械学習と画像処理使ってごちゃごちゃやりたい下級生は声かけてね。
 
じゃあなんでそんな奴が製図についてのうんちくを垂れてるんだっていうと
  1. もちろん授業で履修した
  2. バイトで製図してる
  3. TAを2年間やってる
  4. 今年から制度が変わったので変化に多分一番詳しい
ってな感じで多分学内で教員を除いたら一番製図に関わってきているからだ。
 
は?辛すぎるでしょ。
なんでこんなことに…*1
 
 

メカノデザインとは?

メカノデザインとは、電気通信大学の東4号館(別名:調布刑務所の3階で行われるエクストリームスポーツである。*2
 
なんとこのメカノデザイン、3〜4限ぶっ通しで行われ*3自宅で無限に時間が溶けるのだが*4、単位が2単位しか出ない。
 
しかもなんとこの科目、必修である。しかも進級条件に入っているために「製図を落として留年❤️」みたいな即死トラップである。(実際にはGPAが足りていれば進級できるみたいな制度があるみたいだが、詳しくない)
 
 
は?なんで?バカなの????
 
なので、後期になると現れる不可解な筒を持った集団が刑務作業に赴くのを見かけたら労いの言葉をかけてあげましょう。
 
 

メカノデザインの詳細と変更点

講義の詳細を紹介しつつ、様変わりした講義の変更点を追っていこう。
皆さんはどっちのクソが好きだろうか?俺は今年のクソが好きです。
 

講義の進め方

ひとつの課題に取り組み、提出するまでを追っていく。
  • 〜2018
  1. 講義
  2. 演習(製図)
  3. 次週までに演習中に先生に見せ受領してもらう
  4. 無理なら翌々週の講義冒頭までに提出

  • 2019〜
  1. 講義
  2. 演習
  3. 翌週提出
  4. 翌々週、先生によるチェックが入った図面を受け取り、修正
  5. 翌々々週の講義冒頭までに修正した図面を提出
 
さて、如何だろうか?
何も知らない人がぱっと見たら、2019年の方が面倒に思えるのではないだろうか。
何しろ1つの図面を完成させるのに3-4週間かかるのである。
 
しかし、刑務作業経験者なら分かるはずである。

そう、2019年は ”先生による検図が一回しか行われない” のである。

 
 
2018年まで、刑務作業室では大人気アトラクション「検図」に並ぶ長蛇の列ができていた。
 
我々受刑者は愛すべき教授のスタンプを求めてこの列に並ぶ。しかし、この列は一向に進まない
やってみれば分かるが*5この検図とかいう作業、めちゃくちゃに時間がかかるのである。
 
 
最初期の簡単な図面ならまだいい。問題は、この待ち時間は図面が複雑になればなるほど指数関数的に増えていくところにある。
 
こっちも書くのに時間がかかり、もちろんチェックに時間がかかる。
授業冒頭、先生は暇だが、一度提出され始めると鬼のように忙しくなるのだ。
 
 
それが2019年になくなった。
検図はなくなり、先生方は学生が授業冒頭に提出した図面をコーヒーでも飲みながら優雅に採点ができるというわけである。*6
150人超の図面を一度に採点する作業を優雅にできるのか…?
 
 
これが先生方、ひいては学生の負担を大いに減らすことになったことは言うまでもない。しかも課題が出てから提出まで3週間もある。最高だ。
 
 
しかし、もちろん問題点がある。2019年の製図は、自分が正解しているかどうかなど分からないまま回収されるのだ。
 
なぜこのような仕組みになっているかは次のセクションで解説する。
 
 

テストについて

2018年まではテストなるものがあり、1時間そこらで筆記テストと製図テスト(これも筆記テストなのか?)、いわゆる”製図RTAの大会が開催され、そのテストの出来と製図の出来を加味して成績が決められる。*7

 

しかし、2019年はそのテストが存在しない。
 
既にテストは始まっているのだ。
言われてみれば常時持ち込み可の4ヶ月かけた壮大なテストと言われればそんな気もしてきた。
 
だから検図による先生のチェックは一度きりなのだ。もちろん演習中に聞けばどの先生も親切に教えてくれるが。
 
基本的にテストが嫌いなので自分としては嬉しいが、ここは意見が分かれそうなところである。
 
 
 

課題について

シラバスを調べると分かるが、2019年はこれまでと比べて課題の数が1つ少ない。
その代わりにエクストラ課題が与えられ、これをこなすと加点される。
 
エクストラ課題の数はもちろん2つ以上あるので、人によっては労働量が2018年より多い…?
いや、図面訂正がほとんどないからやはり今年は楽だ。…楽?楽ってなんだ…?
 
 
さて、この記事を読んでいる人にいるかどうかは分からないが、2年生までの人はぜひMエリアの先輩に「フランジ型たわみ軸継手〜!」と声をかけてみよう!きっと各自面白い反応をしてくれることだろう。
 
なぜなら、このフランジ型たわみ軸継手を書く課題から難易度が跳ね上がるためだ。
各種製図の進め方についてのチュートリアルが終わり、実践に耐えうるこれまでの倍量ほどの製図をこなさねばならない。
この図面の名前は各受刑者に深く刻まれていることだろう。
 
 
 

出席について

この講義では出席は取らないが、意外とちゃんとしたチェックが可能である。
というか、出席を取ろうと思ってもただでさえ時間がないのに、150人の出席なんて取る暇がない。
そもそも図面を提出すれば出席がわりになるので、わざわざ出席を取る必要もない。図面を提出しなければ単位が落ちるだけである。
 
その上、座席は出席番号順になっている。刑務作業室に来れば欠席はモロバレである。
 
刑務作業経験者はなんとなく分かると思うが、単位落とす人は大体出席していない人なので今受けている人はちゃんと出席することを推奨する。
 
 
 

採点について

わかんねぇ…
これについては本当にわからない。マジで謎。
 
ただ、確実に言えるのはよく「公平に採点しろ」なんて言葉がTLを賑わしたりするが、「ほならね、君が採点してみろって話ですよ」って言いたくなるくらいには採点が難しいということだ。
 
 
右寄りに書いている人
左寄りに書いている人
何故か同じ部品を2つ書いている人
寸法線の位置が奇想天外な人
薄くて図が見えない人
明らかに手書き箇所がある人
間違ってはいないんだけど普通はそう書かんやろみたいなこと書いている人
泣く泣く書き直ししたら死ぬほど紙が汚くなってしまった人
 
などなど…
 
 
採点基準は知らないが、もうとにかく色んな図面があるので、それに対応できる基準を作るのは不可能なのではないか?と思う。
 
数学の途中式なんて目じゃない。そもそも書いてある場所すら違ったりする世界だ。どうかメカノデザインを受講する諸君は諦めてもらいたい。
 
それにしても先生方はどうやってあの量を採点してるんだ…?
 
 

で?結局何が辛いの??

製図は意外と書けます。

書けば終わります。

思い返せば書くだけです。

 

でも想像してみてください。

実験レポートはなんとなく進捗がわかります。
製図はわからないんです。
 
 
何を書いているのか、なんのために書いているのか。
 
これは正解なのか、間違っているのか。
 
あっちのTAの言っていることが正解なのか、こっちの先生が言っていることが正解なのか。
 
情報基盤センターのPCは永遠に落ちるし、製図アリーナは換気できないし。
 
机は勝手に傾くし、椅子は硬いし。
 
みんな嫌い。でも必要。
 
 
 
だから製図は辛いんだよなぁ。
 
 
 
 

おわりに

さて、この記事ではメカノデザインという刑務作業についての詳細を書いてきた。
これで刑務作業未経験者は大体の概要と、そのめんどくささが掴めたのではないかと思う。また、経験者は変更点に驚きながら読めたのではないかと思う。
 
私は幸運なことに無事にこれらの科目の単位を取得し、今はこんな冗談を言えるまでになったが、やっていた当時は本当にこの図面書いていて意味があるのか??と思っていた
 
しかし、バイトで送られてくるクソ図面を見る度に「メカノデザイン履修して来いやゴミ!!!」と叫んでいる自分もいるので、あれはあれで必要だったのかなぁとも思っている。
まぁ将来図面も書かない人にはやっぱり迷惑な科目かもしれないけど…
 
最後に、今製図をやっている2, 3年生が無事に「あのクソ作業やったわ〜」というように笑い話にでもできるようになれば良いと心から願います。
 
 
 
 

 

 
 

*1:研究室でロボットの研究やろうと思って「製図めっちゃできます!バイトでやってます!!」と豪語したのが原因である。自業自得

*2:余談だが、東4号館は囚人による相互監視がしやすいように内側がガラス張りになっている。実験レポートを提出しに来た学部生が首を傾げていたが、入所すればいずれ分かる

*3:ついでに言うと最高記録は先生が終電を逃すまでやってたとかやってないとか

*4:少なくとも俺は丸一日かかった

*5:俺はTAとして多分唯一この作業を行った。もちろん事前にチェック項目が決められており、それ以外はチェックしなかったがそれでも死ぬほど時間がかかった

*6:ちなみに2018年まで、先生方は検図に加えて図面を持ち帰っての採点もしていた。本当に頭が下がる

*7:ちなみに製図で秀って人を見たことないのだが、存在するのだろうか

自分的Ubuntuの環境設定ベストプラクティス

自分向け、うまく行ったコマンド類だけの羅列
御託はいいからうまくいくの教えろ!的な人向け。
ただし救済はない。
パクリ先の参考にしたURLに飛ぶと詳しく書いてあります。


目次
各コンテンツに繋がりは特にないので必要なところに飛んで大丈夫だと思われる。
ただ、Nvidiaドライバのインストールだけは一番最初にやると良さそう。

Nvidiaドライバのインストール

最初にやらないとフリーズしまくることがある

参考
https://echomist.com/ubuntu-18-nvidia-driver-install/


[ソフトウェアとアップデート] → [追加のドライバー]
NVIDIA driver metapackageをnividia-driver-xxxから使用します」を選択して変更を適応するだけ

CUIだと下記コマンドで一発

sudo ubuntu-drivers autoinstall

システムの更新

とりあえずやってエラーがないか確認する。
再起動で大抵解決すると思っている。

sudo apt update
sudo apt -yV upgrade
sudo shutdown -r now

お掃除

とりあえず更新したらやるといいっぽい

sudo apt autoremove
sudo apt clean

日本語フォルダの英語化

日本語表記のフォルダあると移動しにくいので推奨

LANG=C xdg-user-dirs-gtk-update

色々必要そうなもの

sudo apt -yV install でぶち込め
他なにかあれば連絡ください

sudo apt -yV install \
git \
wget curl \
build-essential \
zip unzip

Python色々

Python3 開発用ファイル,セットアップツール,pip,numpy のインストール

sudo apt -yV install \
python3-dev \
python3-setuptools \
python3-pip \
python3-numpy

Anacondaの導入

1.公式からダウンロードする
https://www.anaconda.com/distribution/

2.インストーラの起動
ダウンロードしたファイルがあるディレクトリで

bash Anaconda3-*-Linux-x86_64.sh

その後にEnterとyesを押し続ける。
ここでVScodeを入れる。

3.確認

conda -V

4.パスを通す
パスが通ってなかったらやる

参考
AnacondaのPATHの設定 - Qiita

vi ~/.bashrc

vimでもなんでもエディタで開いて

export PATH=~/anaconda3/bin:$PATH

をどこかに追加

source ~/.bashrc

とすれば多分解決する。

Docker のインストール

元々はnvidia-docker2について書いていたのですが、非推奨になったので更新しました。

参考
NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う - CUBE SUGAR CONTAINER


1.前提パッケージ類

sudo apt -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

2. Docker のリポジトリを APT に登録

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update


3. Docker コンポーネントのインストール

sudo apt -y install docker-ce docker-ce-cli containerd.io
sudo docker version


4. Docker に Nvidia Driver をインストール

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt upgrade

sudo apt -y install ubuntu-drivers-common
sudo ubuntu-drivers autoinstall

5. NVIDIA Container Toolkitのインストール

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$(. /etc/os-release;echo $ID$VERSION_ID)/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update

sudo apt -y install nvidia-container-toolkit

6. 再起動と確認

sudo shutdown -r now
nvidia-container-cli info

7.動作確認

sudo docker run --rm --gpus all -it ubuntu nvidia-smi

Dockerの掃除

docker rm $(docker ps -aq) #すべてのコンテナを削除
docker images | awk '/<none/{print $3}' | xargs docker rmi #タグがnoneになっているimageを削除

texの導入

参考
Ubuntu 18.04 LTS に LaTeX をインストール - Qiita

これだけ

sudo apt install texlive-lang-cjk xdvik-ja evince
sudo apt install texlive-fonts-recommended texlive-fonts-extra

openCVの導入

CUDAを設定した前提だが、後述の通りCUDAはあまり生で入れないほうがいい気がするので、下記リンクに飛んでCUDAなしで導入した方がいいかもしれない(未検証

参考
OpenCV 最新版のビルドとインストール,CUDA 対応可能(ソースコードを使用)(Ubuntu, Debian 上)


1. 前提パッケージ類

sudo apt -yV install openalpr openalpr-utils libopenalpr-dev
sudo apt -yV install openni2-utils libopenni2-dev
sudo apt -yV install primesense-nite-nonfree
sudo apt -yV install libpcl-dev
sudo apt -yV install libguava-java
sudo apt -yV install python-dev python3-dev pylint pylint3 flake8 python-flake8 python3-flake8
sudo apt -yV install libgtk2.0-dev and pkg-config

2. ソースコードのダウンロードと cmake の実行

cd /tmp
rm -rf opencv
git clone https://github.com/opencv/opencv.git
cd /usr/local
sudo rm -rf opencv_contrib
sudo git clone https://github.com/opencv/opencv_contrib.git
cd /tmp
cd opencv
rm -rf build
mkdir build
cd build
CUDA_PATH="/usr/local/cuda-10.0" CFLAGS="-I/usr/local/cuda-10.0/include" LDFLAGS="-L/usr/local/cuda-10.0/lib64" \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/usr/local/opencv_contrib/modules \
-D INSTALL_TESTS=ON \
-D INSTALL_C_EXAMPLES=ON \
-D WITH_PYTHON=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=python3 \
-D OpenBLAS_INCLUDE_DIR=/usr/include/x86_64-linux-gnu \
-D OpenBLAS_LIB=/usr/lib/x86_64-linux-gnu/libopenblas.so \
-D WITH_MKL=ON \
-D WITH_CUDA=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_CUDNN=ON \
-D WITH_NVCUVID=OFF \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_PTX=7.5 \
-D BUILD_EXAMPLES=ON ..

CUDAなし差分

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/usr/local/opencv_contrib/modules \
-D INSTALL_TESTS=ON \
-D INSTALL_C_EXAMPLES=ON \
-D WITH_PYTHON=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=python3 \
-D OpenBLAS_INCLUDE_DIR=/usr/include/x86_64-linux-gnu \
-D OpenBLAS_LIB=/usr/lib/x86_64-linux-gnu/libopenblas.so \
-D WITH_MKL=ON \
-D BUILD_EXAMPLES=ON ..

3. ビルド

CUDA_PATH="/usr/local/cuda-10.0" CFLAGS="-I/usr/local/cuda-10.0/include" LDFLAGS="-L/usr/local/cuda-10.0/lib64" \
make -j4

4. インストール

sudo make install
sudo /sbin/ldconfig

5. 確認

python3 -c "import cv2; print( cv2.__version__ )"

CUDAの導入

CUDAは生で入れるのはアップデート等が面倒なので推奨しない。できれば全てDockerで動かすのが良い。

参考
Ubuntu 18.04へのCUDAインストール方法 - Qiita


まずは
CUDA Toolkit 10.2 Download | NVIDIA Developer

にアクセスしてインストールしたいCUDAのバージョンを選択する。
localの場合は指示に従えば良い。
networkの場合は以下のような操作が必要。
各URL、ファイルは自分の場合と読み替えで。

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt update

sudo apt install cuda-10-0
sudo reboot

rm cuda-repo-ubuntu1804_10.0.130-1_amd64.deb

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

sudo shutdown -r now

nvidia-smi

nvidia-smiで動作確認できたら勝ち。無理ならどんまい。

cuDNNの導入

"7.5.0.56-1+cuda10.0" の部分は読み替え
Index of /compute/machine-learning/repos/ubuntu1804/x86_64
から適切なバージョンを探す。

echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-ml.list
sudo apt update
sudo apt install libcudnn7-dev=7.5.0.56-1+cuda10.0 libcudnn7=7.5.0.56-1+cuda10.0

プロキシ環境下でのUbuntuインストール

Ubuntu Desktop 18.04.2 LTS をPCにインストールする際になぜかイーサネット接続ができなくてハマったので書き残しておきます。

 

1. Ubuntuのインストールメディア作成

ここからUbuntuを入手します。私はUbuntu Desktop 18.04.2 LTSをインストールしました。

Rufusというソフトが便利だったのでそれを使いました。

 

2. Ubuntuをメディアから起動する

その際に以下の画面になるので右側のUbuntuを選択します。f:id:apissP:20190801140721g:plain

 

3. プロキシを設定する

setting>networkを選択して、プロキシの設定を確認します。

これをマニュアルにして、プロキシアドレスとポート番号を打ち込みます。

 

また、terminalを起動して、以下の様にパスワード等を設定します。HTTPSについても同様です。

export HTTP_PROXY=user:pass@proxy.url:port

 

4. ドライバを更新する

ここを参考にさせていただきました。以下は引用文となります。

 

Intelのドライバ配布ページからドライバをダウンロード、解凍します。

nvm.cをテキストエディタで開き、e1000e_validate_nvm_checksum_generic関数を以下のように変更します。

 

s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
        return 0;
}

あとはビルド・インストールするだけです。

#さっきのソースのあるディレクトリに移動
$ cd e1000e/src
$ make
$ sudo make install
  
#現ドライバの削除
$ sudo rmmod e1000e
#新しいドライバの適用
$ sudo modprobe e1000e
  
#一応ネットワーク再起動
$ sudo /etc/init.d/networking restart
 
#今のモジュールを次回起動時に使用するように
$ sudo update-initramfs -u

 

 

以上でインターネットに繋がるかと思うので、後は通常のインストールを行って終了です。

ブログをはじめる

自己紹介

はじめましての方ははじめまして、知っている方はこんにちは。あぴすといいます。

現在電気通信大学大学院の1年生で、就活を目前に控えております。

なので、就活のために自分のやっていることをここに書いておこうと思って始めました。

 

…といっても、研究のことについては病院、企業との共同研究の2つを受け持っているので、守秘義務的に内容はは書けませんが、そこで使ったor勉強した画像処理や機械学習の技術についていろいろ書いていけたらと思っています。

 

カテゴリとしては大きく分けて「書いたコードについて」「勉強したことについて」「趣味について」になると思います。

 

スキルについて

研究関係

・論文を2本書きました(一つはリジェクトされました…)

・現在ジャーナルに提出する3本目を執筆中

・受賞1(超音波治療研究会 最優秀ポスター賞)

 

プログラミング関係

Python (ある程度の読み書き)

・画像処理の基礎的な知識

・音声処理の初歩的な知識

機械学習についての基礎的な知識

・深層学習ライブラリ(Pytorch, Keras)の基礎的な操作

基本情報技術者試験に合格する程度のリテラシー(朝に起きることができます)

 

 

恥ずかしながら大学4年になってはじめてプログラミングを始めたので、あまり大したことはないです。

電気通信大学だからプログラミングとかやってるの?」ってよく言われますが、バリバリの機械科なのでむしろ1年次に「コンピューターリテラシー」でC言語のprintfと戯れた程度です…(研究で使うのになぜやってくれないんだ…

機械科でプログラミングやろうとすると、周りに聞けないので辛いですね。4年生の4月~5月は環境構築で溶けました。いい思い出です。これから本読んだりして、頑張って知識増やしていきたいです。