祭囃子は遠く、

祭囃子は遠く、

無職のハッピーエヴリディを書いていきます。

ダンロン3プレー 〜1回目の自由行動

ダンロン3を始めたので今の時点での予想を抽象的にでも書いておく、既プレイはニヤニヤして腕組みでもしててください。

1,2と進めたところまでのネタバレはすこーしだけあるのでやってない人は見ないでください。

追記したりしてもしかしたら情報足すかも。








■全体的な謎
雑に予想していく、まだよくわからんので抽象的な予想。

  • 鳥籠になっていて外が分からないが、外がどうなってるか分かっても脱出は厳しいねぇ〜ってなるタイプそう → 箱庭モノは大体そう
  • モノクマのことを最初は知ってそうだったので時系列的には1,2の後ぽい
  • モノクマーズのピンクの言いぶり的には複数回同じことが行われている感じもするので、ゲームを通して何かしらの目的がありそう? → 1みたいな動機ではなさそう
  • 初回特典は卒業→外に出れるなのか不明瞭だった気がするからこの辺トリック絡んできそう

なんかよくわからんけど重要そうなことも適当に

  • なくなった記憶そのものというより記憶の無くし方とかそのへんが重要そう
  • モノクマーズが5体もいる理由
  • 校内の外にはでれるのに内部から外に出られなさそうな封鎖がしてある理由、そもそも荒れ果てている理由

あとはグチ

  • アクションダルそう
  • マリオみたいなやつ操作性悪すぎ
  • 捜査パートに脳のリソースを割きたくないので動かすみたいなやつ要らない(どの程度使うかわからんが)

■キャラの所感とか予想
赤松楓

  • 可愛い
  • 希望→未来ときて何になるか
  • 才能的にも今までと根本的に違うタイプの立ち位置を見せつけてきそう(最後のワンマン感をなくすとかそもそもそういう展開にならないとか)

入間美兎

  • 下品
  • キャラ的には料理人と同じなので死にそうだが女ポイントで延命
  • 発明ポジ(左右田ポジ)はしばらくは重宝しそうなので少なくとも中盤まではいそう

王馬小吉

  • 見た目からすでにCV下野
  • 若干のバックボーンの謎を抱えているので最初には死ななそう
  • ヤクザと同じ感じで疑われつつも最終生き残りそう寄り

天海蘭太郎

  • 流石にすぐ完全退場しなそう
  • 消す前の記憶がありそう
  • 終盤までいそう筆頭

キーボ

  • 覚醒パートありそう
  • 殺されそう、死んだとき殺人に当たるのかというくだりがありそう

獄原ゴン太

  • 毎回いる筋肉枠
  • 狼(だっけ)に育てられたこと自体が大きく関わってくる瞬間がありそう
  • 飼育員ポジと被りきらないように動きそう
  • 終盤手前くらいまでいそう

最原終一

  • 女かハゲ、あと女なら多分レズ(確信)
  • 本当の才能は探偵ではなさそう
  • 流石に終盤あたりまでいそう

真宮寺是清

  • 多分ブリーチにいた
  • 中盤で殺されそう

茶柱転子

  • 早めに死にそう

白銀つむぎ

  • コスプレしたあと死にそう(役目を終えるので)

星竜馬

  • 意外と死なないなってくらいのタイミングまでいそう
  • 謎の事件を抱えてるので最初には死ななそう

東条斬美

  • 多分レインが好き
  • 序盤〜中盤で人殺しそう

春川魔姫

  • 声と顔面が良い
  • 思ったよりデカい謎を抱えていそう
  • 死なないでほしいけど死にそう

百田解斗

  • 多分バカ
  • 生き残りそう

夢野秘密子

  • 一回手品披露したら役目を終えそう

夜長アンジー

  • 人殺しそう


一旦以上。

スクレイピングから機械学習するまでのDockerfile

pytorchの公式イメージをベースとしてスクレイピング系とboosting系を乗っける。
jupyter-labも使える。
想定としてはwebのデータをNN系とboosting系で機械学習する人向け。
自然言語系の環境も整えたいけどやったことないからだれか・・・

chrome-driverのバージョンは自分が使っている(であろう)ブラウザから「ヘルプ→chromeについて」みたいなところからバージョンを確認して揃える。
※2022年7/4時点では以下で動作確認。

Dockerfile

FROM pytorch/pytorch:latest

ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get -y update \
    && apt-get -y upgrade \
    && apt-get install -y unzip zip tzdata git wget gnupg

RUN apt-get install -y libgl1-mesa-glx libglib2.0-0 libsm6 libxrender1 libxext6

# chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
    echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable

# chrome driver(ドライバのバージョンは適切なものを入れる)
ADD https://chromedriver.storage.googleapis.com/103.0.5060.24/chromedriver_linux64.zip /opt/chrome/
RUN cd /opt/chrome/ && \
    unzip chromedriver_linux64.zip && \
    rm -f chromedriver_linux64.zip

# labは最新のを入れる
RUN python -m pip install --upgrade pip
RUN pip install jupyterlab
RUN pip install ipywidgets

# seleniumも最新の入れる
RUN pip install selenium
RUN pip install bs4
RUN pip install oauth2client

# requirements.txtのインストール
WORKDIR /app
ADD requirements.txt /app
RUN pip install -r requirements.txt

requirements.txt
※僕の趣味で何個か無駄なライブラリが入ってる(tweepyとか)

lxml==4.9.1
matplotlib==3.5.2
pandas==1.4.3
scikit-learn==1.1.1
seaborn==0.11.2
sympy==1.10.1
opencv-python==4.6.0.66
opencv-contrib-python==4.6.0.66
tweepy==4.10.0
schedule==1.1.0
tensorboardX==2.5.1
torchsummary==1.5.1
xgboost==1.6.1
lightgbm==3.3.2
catboost==1.0.6

pytorchでKeras風の学習と出力をする

本題の通りpytorchでKeras風の学習と出力をするプログラムを作りました。
Keras風と言っているのは単純にmodel.fit(~)みたいな感じで学習して、verboseまわりが同じ感じになるってだけです。
そもそもpythonが下手なのでそんなに大層なことはできません。

指摘や文句は@scibeanまで

モチベーション

最近pytorchを使いはじめたんですが、ずっとKeras使ってたので学習周りで少し手間取ったのと、lossとかaccとか表示してくれないのが不満だったので。
正直pytorchの良さを殺してしまっている恐れもありますが・・・知らんけど。

前提

今回はdocstringを綺麗に書こうキャンペーンで丁寧目に作ったので基本そちらを見ればいいんですが一応前提は以下

  1. pytorchが使える状態
  2. GPUが使える状態
  3. multi-gpuでない

くらいでしょうか。cpu対応とかmulti-gpu対応とか別に難しくはないんですが、めんどくさいのと後者に至ってはデバッグ環境がないので諦めました。

コード

こっちは最新化しないので、最新版はgitを見てください
github.com

class keras_model():
    """
    keras風のトレーニング+出力にするクラス
    GPU計算+1GPUが前提
    
    Attributes
    ----------
    model : net
        pytorchで作ったモデル
    epoch : int
            epoch数
    dataloader : DataLoader
        訓練データ
    criterion : torch.nn
        lossの種類
    optimizer : optim
        pytorchのoptimizerクラス
    scheduler : scheduler
        putorchのschedulerクラス
    validation : DataLoader
        validationデータ
    accuracy : function
        accuracyを返す関数。デフォルトはクラス分類を想定(=出力がスカラ)。
        引数と出力はdefault_accuracyと同じである必要がある
    step_num : int
        step数
    """
    def __init__(self,model=None):
        """
        Parameters
        ----------
        model : net
            pytorchのモデル
        """
        self.model = model
        self.epoch = None
        self.criterion = None
        self.optimizer = None
        self.scheduler = None
        self.dataloader = None
        self.accuracy = None
        self.validation = None 
        self.step_num = None
        
        if model is None:
            raise ValueError("model is None!")
    
    def train_step(self,images,labels,val=False):
        """
        1step分の学習をする

        Parameters
        ----------
        images : Tensor
            (batch_size,C,H,W)のTensor
        labels : Tensor
            正解ラベルのTensor
        val : bool ,default False
            Trueのとき評価モード
        Returns
        -------
        pred : Tensor
            推論された値のTensor
        loss : float
            lossの値
        """
        optimizer = self.optimizer
        model = self.model
        criterion = self.criterion
        scheduler = self.scheduler
        
        if val:
            images = images.cuda()
            labels = labels.cuda()
            out = model(images)
            loss = criterion(out, labels)
            return out.max(1)[1],loss.item()
        
        optimizer.zero_grad()
        images = images.cuda()
        labels = labels.cuda()
        out = model(images)
        loss = criterion(out, labels)
        loss.backward()
        optimizer.step()
        if scheduler is not None:
            scheduler.step()
        return out.max(1)[1],loss.item()
    
    
    def fit(self,epoch=None,dataloader=None,criterion=None,optimizer=None,scheduler=None,validation=None,accuracy=None):
        """
        モデルの学習を実行
        Parameters
        ----------
        epoch : int
            epoch数
        dataloader : DataLoader
            訓練データ
        criterion : criterion
            lossの種類
        optimizer : optimizer
            pytorchのoptimizerクラス
        scheduler : scheduler or None, default None
            putorchのschedulerクラス、指定は任意
        validation : DataLoader or None, default None
            validationデータ、指定は任意
        accuracy : function or None, default None
            accuracyを返す関数、指定は任意。デフォルトはクラス分類を想定(=出力がスカラ)。
            引数と出力はdefault_accuracyと同じである必要がある
        """
        self.epoch = epoch
        self.dataloader = dataloader
        self.criterion = criterion
        self.optimizer = optimizer
        self.scheduler = scheduler
        self.accuracy = accuracy
        self.validation = validation 
        self.step_num = len(dataloader)
        
        if epoch is None:
            raise ValueError("epoch is not None")
        
        if dataloader is None:
            raise ValueError("dataloader is not None")
        
        if optimizer is None:
            raise ValueError("optimizer is not None")

        for e in range(epoch):
            print("Epoch {}/{}".format(e+1,epoch))
            step_t=0
            step_acc=0
            step_loss=0
            n_sample=0
            model.train()
            for i,(batch_images,batch_labels) in enumerate(dataloader):
                start_step_t = time.time()
                preds,loss = self.train_step(batch_images,batch_labels)
                if accuracy is None:
                    acc = self._default_accuracy(preds,batch_labels)
                else:
                    acc = accuracy(preds,batch_labels)
                end_step_t = time.time()
                step_t+=end_step_t - start_step_t
                step_acc+=acc
                step_loss+=loss
                n_sample+=len(batch_labels)
                acc = step_acc/n_sample
                loss = step_loss/(i+1)
                self._keras_like_output(step=i,acc=acc,loss=loss,t=step_t)
                
            if validation is not None:
                v_loss=0
                v_acc=0
                n_sample=0
                model.eval()
                with torch.no_grad():
                    for i,(batch_images,batch_labels) in enumerate(validation):
                        val_preds,val_loss = self.train_step(batch_images,batch_labels,True)
                        if accuracy is None:
                            val_acc = self._default_accuracy(val_preds,batch_labels)
                        else:
                            val_acc = accuracy(val_preds,batch_labels)
                        v_acc+=val_acc
                        v_loss+=val_loss
                        n_sample+=len(batch_labels)
                    val_acc = v_acc/n_sample
                    val_loss = v_loss/(i+1)
                    self._keras_like_output(step=i,acc=acc,loss=loss,val_loss=val_loss,val_acc=val_acc,t=step_t,val=True)
            print("")
    
    def _default_accuracy(self,preds,labels):
        """
        accuracyを計算

        Parameters
        ----------
        preds : Tensor
            推論結果のTensor
        labels : Tensor
            正解ラベルのTensor

        Returns
        -------
        acc : float
            精度
        """
        acc = (preds == labels.cuda()).sum()
        return acc.item()
        
    def _keras_like_output(self,step,acc,loss,t,val=False,val_loss=None,val_acc=None):
        """
        kerasのverboseぽい出力

        Parameters
        ----------
        step : int
            何step目か
        acc : float
            各stepまでにおける精度の平均
        loss : float
            各stepまでにおけるlossの平均
        val : bool or, default False
            validation結果の出力か否か
        val_loss : float or None, default None
            validationのlossの平均
        val_acc : float or None, default None
            validationの精度
        """
        if val:
            l = self.step_num
            epoch = self.epoch
            step_p = (step+1)/l
            bar = "=" *30
            result = " - loss:{:.4f} - acc:{:.4f} - val_loss:{:.4f} - val_acc:{:.4f}".format(loss,acc,val_loss,val_acc)
            print("\r {}/{}[{}]-{:.2f}s{}".format(l,l,bar,t,result), end="")
        else:
            l = self.step_num
            epoch = self.epoch
            step_p = (step+1)/l
            bar = "=" *int(step_p*30)+">" + " " *(30-int(step_p*30)+1)
            if step_p==1:
                bar = "=" *30
            result = " - loss:{:.4f} - acc:{:.4f}".format(loss,acc)
            if val_acc is not None:
                result = " - loss:{:.4f} - acc:{:.4f} - val_loss:{:.4f} - val_acc:{:.4f}".format(loss,acc,val_loss,val_acc)
            print("\r {}/{}[{}]-{:.2f}s{}".format(step+1,l,bar,t,result), end="")

使い方

イメージとしてはtorchのモデルをkerasのモデルっぽい新しいクラスにしてfit関数を使うイメージ

import time #必須
#~必要なライブラリの読み込み~

#~任意のデータの読み込み(DataLoaderクラスである必要性がある)~

model = Net()#任意のモデル
model.cuda()

criterion = nn.CrossEntropyLoss().cuda()#モデルによって適切なものに変える
optimizer = torch.optim.SGD(model.parameters(),
                      lr=0.0005, momentum=0.99, nesterov=True)#モデルによって適切なものに変える
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer,lambda epoch: 0.95 ** epoch)#適切なものにする(schedulerはなくても良い)

k_model = keras_model(model=model)
k_model.fit(criterion=criterion,optimizer=optimizer,epoch=10,dataloader=trainloader,validation=val_loader,scheduler=scheduler)

※動作イメージ図
f:id:ta_ichi:20200322030726p:plain

最後に

  1. gpuの指定もうちょっと柔軟にしたいかも
  2. lossとかaccのあるエポックの出力までに置けるstepでの平均というのがどの程度正当化されるかよくわかってない(かと言ってstepごとにしても・・・)(そもそもkerasはどう計算してる?)(そもそも平均とかの計算あってる?)
  3. kerasにある機能をもっとつけたいかも?(save_weightsとかはあっても良さそう)
  4. kerasにはないけど色々表示させたりもしたい、学習率とか
  5. 少しプログラムに無駄があるので改善したい

本気で読んだ論文まとめ

本気で読んだ論文を簡単にまとめていく記事にしたいと思います。あとなるべく前提知識を必要としない感じで書いて資料に詳しい説明を書きたい。

From complex to simple : hierarchical free-energy landscape renormalized in deep neural networks

arxiv.org

DNNモデルを統計力学的に解析して、なぜデータ数に対して多いパラメータを決めることができるのかを調べた論文。

資料

輪講で使った資料を置いておきます。(後半はちょっと失速しているのであとで足したい・・・)

発表資料

背景

  • 現在の機械学習はモデルのパラメータ数に対してデータ数が少ないの学習できている(と信じられている)

設定

  • DNNモデルを対象とし、教師データとモデルの出力が一致する重み空間を解析することで、学習済みモデルの比較をする。
  • 解析計算では解析を可能にするためにデータ間に弱い相関を持たせている
  • "gap"からeffectiveなコスト関数を出してシミュレーションの計算もしている

結果

  • 入力、出力層の近くの重みパラメータはどの重みのサブセットを取ってきてもオーバーラップがそこそこある
  • 対照的に中間層はオーバーラップがなく、特に決まった値を取る必要がない(中間層は適当に決めて良い?)
  • シミュレーションは上の結果を支持する形で得られた。

課題

  • データ間に弱い相関を入れたのがどこまで正当化されるか
  • データ数とニューロンの数の比を保ったまま無限大に飛ばす操作がどこまで正当化されるか

ギモン

  • gapについて、中間層でも符号を揃える必要はあるのか?
  • teacher/student settingのRSB解のもじり方がわからない

ひとくちめも

目次

tensorflow-gpuを入れる(for Windows)

最新のやつ入れる。インストーラー起動してC++pythonのとこにチェック入れるのを忘れずに

visualstudio.microsoft.com

  • 公式ホームページ(ソフトウェア要件から各種リンクあり)

www.tensorflow.org
ここからCUDA10.0と~for cuda10のcudnnの最新バージョンを入れる。ただインストーラー立ち上げて推奨設定でおk

公式を見るとtensorflow-gpuはcuda9しか対応してないように見えるけど、最新のやつ(2019/7/21 tf ver 1.14)はCUDA10がないと動かないみたい。

  • ライブラリインストール

ここまで終われば

pip install tensorflow-gpu
pip install keras
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
  • mnist(keras)でチェック

github.com

  • cupy導入

pip install cupy-cudaバージョン

でインストール(pip install cupyだとダメだった)。今回は以下のようにする

pip install cupy-cuda100

Conda promptへのエイリアス設定

基本コマンドプロンプトと同じノリ

参考サイト
qiita.com

doskey ls=dir
doskey /macros > %USERPROFILE%\macros_conda.txt

conda promptのショートカット→プロパティのリンク先の末尾に以下を追加

& doskey /macrofile=%USERPROFILE%\macros_conda.txt

dockerからjupyterを手軽に起動させる例(Windows)

windowsにおける$PWDは%cd%らしい

doskey jp=docker run -v "%cd%":/home -w /home -p 8888:8888 --rm -it kaggle/python jupyter notebook --no-browser --ip="0.0.0.0"  --allow-root

あと使いそうなのはactivateとか?$*は引数

doskey ac=activate $*

上記まとめ

doskey ls=dir
doskey jp=docker run -v "%cd%":/home -w /home -p 8888:8888 --rm -it kaggle/python jupyter notebook --no-browser --ip="0.0.0.0"  --allow-root
doskey ac=activate $*
doskey /macros > %USERPROFILE%\macros_conda.txt

kaggleやろおぜ(環境構築編)

こんばんわ、周りのオタクたちがkaggleの機運を高めているので環境構築について色々調べていたら気になるものが

qiita.com

ば・・・爆速!?環境構築が一瞬で終わってしまう夢のような話があるのか。
読んでいくとDockerを使ってやっているらしい。

Dockerとは

f:id:ta_ichi:20190609000232p:plain
Docker(ドッカー[2])は、コンテナと呼ばれるOSレベルの仮想化(英語版)環境を提供するオープンソースソフトウェアである[3]。VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つんですよね。

まぁ早い話が、アプリとかライブラリとかOSとかひとまとめにしたやつをガシャガシャ動かせるやつみたいなもんだと思ってます。
実際に触り始めて1日しかたってないんで間違ってたら許してね。

これを使えば機械学習とかに使うライブラリをひとまとめにしたやつがババンと作れるわけですからそりゃ早いよねって。

対象・前提

対象は僕のようなPC初心者の赤ちゃんから、この辺はよく知らない大人までです。
詳しいことは理解しなくてもnotebookを開けるように書いたつもりですが、細かいところで動作確認取ってないやつあるのでおかしかったら教えてください。

僕自身あまり詳しくないので、ふんわりとしかDockerの詳しい説明とかもろもろしません。
許してね。
上の記事とこれ読めば大体わかるから頑張りましょう。(ところどころコマンドミスってるけど)
qiita.com

導入方法

基本的には上の通りにやったら一瞬で終わります。
ただ、上のやつって自分の手元にあるPCにDocker Image(環境そのものが全部詰まってるやつ)を持ってくるわけなんで、めちゃくちゃ容量食うわけです。
kaggleの公式imageだと17Gbくらいかかります。

そこで、クラウドでやりましょう!という話になります。
今回おすすめするのはGCP(Google Cloud Platform)です。
console.cloud.google.com

AWSもよさそうですが、まじめに使ったことがないのでこちらで説明していきます。
GCPは初回特典として300ドル分のクーポンをくれるので結構アドです。

まずは左上あたりにあるところからプロジェクトを作りましょう(kaggle-ichimuraとなってるところ)
f:id:ta_ichi:20190609001310p:plain
これ初回ログインの画面ではないから、もしかしたら初ログインしたら手順通りにやっていくと勝手に作らされるかも。

そして「三」みたいなボタン押してVMインスタンスを作成します。
f:id:ta_ichi:20190609001557p:plain

その後作成を押すと実際にVMのスペックを設定するところが以下のように出てきます。

f:id:ta_ichi:20190609001823p:plain

名前は適当に決めます。リージョンとゾーンは、近いやつを適当に選びました。この画面の右側に1時間当たりいくらとか出てくるので、そこと相談しながら決めましょう。
CPUやストレージについてもお好みで設定してください。僕は画面の通りに設定しました。

大事なのが「VMインスタンスにコンテナイメージをデプロイする」ってところで、ここにチェックを入れて「kaggle/python」と打ちましょう。
そうすると勝手にkaggle公式のDocker ImageをVMに導入してくれます。
ただ、立ち上げ直後は各種DLで表示されません。しばらく待ってください(5敗)

その間に以下を導入しましょう。
cloud.google.com
GCPの操作が色々楽になります、例えばSSH認証とか通信とかもう全部勝手にやってくれます。

導入したら専用のshellができるので(windows)それで

gcloud compute ssh --zone {インスタンスのゾーン} "{インスタンス名}"

で通信ができるようになります。

入ったら、

docker images

で「kaggle/python」があるか確認してください。なかったらもう少し待つか、VMを作り直してみたりしましょう。
ここまで完了すればもう環境自体は目の前にあります。

確認出来たら

docker run  -p 8888:8888  -v $PWD:/home --name test -it kaggle/python bash

でコンテナ(VM上にできる実際の環境)を作成します。
docker runは、基本的に「docker run -it {image名} そいつにやらせたいこと」みたいな形をしています。
上のコマンドは
 -pでポートのなにがしか(このあたりわかんなすぎて辛い)
 -vでVM上のディレクトリをコンテナ内の:以下から参照できるようにする(コンテナの中にデータを蓄えることは基本しない)。$PWDVMのカレントディレクトリを勝手に代入してくれます。
 --nameでコンテナの名前
 -itで用いるimage
bashを実行しますとなります。

例えば

echo "print(\"Hello World\")" > test.py
docker run -v $PWD:/home -w /home --rm -it kaggle/python python test.py  

とやるとなるほどにゃんこになれると思います。

 --rm は実行ごとにコンテナを使い捨てるオプションで、-wはコンテナのカレントディレクトリになります。
 -vでコンテナのhomeディレクトリとVMのカレントディレクトリを引っ付けてるので、そのままtest.pyで実行できているわけです。

そんなこんなでコンテナの中に入れたら

jupyter notebook --ip=0.0.0.0 --allow-root

と打ちましょう。オプションはどんなipアドレスからの接続も受け付けますとかそんな意味だった気がします。

画面にjupyter notebookが起動され、tokenが表示されると思うのでこれをコピーしましょう。

ここでsdkのshellに戻って

gcloud compute ssh "インスタンス名" -- -N  -L 28888:localhost:8888

と打ち込みます。
その後ブラウザのURL打つことろに「localhost:28888」と打ってアクセスします。

f:id:ta_ichi:20190609004709p:plain

すると上みたいな画面になって、tokenを聞いてくるので上のやつを張り付けてゴールです。

入れたら色々importしてみて各種ライブラリが入っていることを確認してください。

終わりに

さっき成功して忘れないうちにかいてるので、もしかしたら上の通りにやってもだめかもしれません。
その時は教えてください。

あとkaggleにはkernelってやつがあって、notebook形式で人の成果を読むことができるすごいやつなんですが、なんと本当にnotebookのようにプログラムを実行できます。
参加しているコンペのページからNew kernelで作成すると訓練データなど一通り導入してある仮想環境が立ち上がります。
最初はここで遊ぶのが一番いいでしょう(無料だし、GPU使えるし)。ただ、外部からデータ持ってきたりとかその辺はいろいろできなかったりするので。
もっといい環境でやりたい場合に今回の方法がおすすめです。

公式imageはまだGPUをサポートしてないぽい?ですが、git読んでる感じそのうちリリースされそうなので待ちましょう。

ちなみに僕はこれに出ようかなぁと思ってます。なんか分子間のカップリングを予測するやつっぽいですね。
僕は物理科出身な上にこのあたりが割と近い専門なのですが、不勉強なので何のアドバンテージもありません。頑張ります。
www.kaggle.com
 

追記

kaggleを始めようぜって前提で記事書いたのに、データセット落とすとこ説明してませんでしたね。
kaggle APIを使いましょう、imageの中には導入されていなかったので以下に従って導入などを済ませてください。(僕はコンテナでやった)
qiita.com
基本この通りやればいいんですが、jsonファイルをアップするの面倒なんで~/.kaggleに入って、DLしたjsonの中身をコピペしましょう

echo "{\"username\":\"scibean\",\"key\":\"key\"}" > kaggle.json

echo以下は中身のコピペで、"をバクスラでエスケープするのを忘れないでください。その結果をkaggle.jsonに書き込んでいます。
この設定が終われば後は自由に使えます。

画像のようにコンペのページに行くとdataタブの右下にapiでデータ落とす際のコマンドがあるのでコピペしましょう
f:id:ta_ichi:20190609120208p:plain

この時

mkdir data
cd data

とやっておいてコピペしたコマンドに-wをつけるとカレントディレクトリにDLされます。
基本zipなのでunzipコマンドで解凍しましょう。
解凍先はなるべく指定した方がいいです。たまにファイル数がとんでもないやつがモリモリ出てきて大変なことになります(rm,mvコマンドにはファイル数に上限あるがので面倒なことになります)

では

VR、始めました。

最近VRを始めました。
VRreadyなPCを持っていたのでOculus RIFT Sを買ったんですがめちゃくちゃ満足してます。

身の回りにVRブームが来そうな機運を感じているので、今遊んでるソフトとかについて感想とか書いていきます。

VRchat

f:id:ta_ichi:20190604235949p:plain
これはVtuber好きなら聞いたことあると思いますが、VR空間でアバターになりきってみんなとお話しするというプラットフォームです。
ロビーみたいな適当に集まった人がいる空間から、プライベートな空間まで色々で、すごく未来感がありました。

まずは、ロビーっぽいところ(Hubと呼ばれるワールド)へ行って、VRの民とコミュニケーションを図ります。
f:id:ta_ichi:20190604235410j:plain
ロビーに先についていた友人(細身のロボット)ですが、いきなり外人に絡まれていました。

なんかでかいロボットのアバターに「zigzag zigzag oioioi」とひたすらに囁かれていたらしいです。
意味不明で恐怖していましたが、あとから調べると以下のような謎の動画が見つかったようです。
www.youtube.com

奥のかわいらしいアバターはスペイン人で、事あるごとに「North Korea is No1!!!!」と叫びまくる異常者でした。

友人も異常者なので事あるごとに鋭利な爪のアバターで目をつぶそうとしてきます。わかってても目がぞわぞわします。
f:id:ta_ichi:20190605000804j:plain

BeatSaber

f:id:ta_ichi:20190604235927p:plain
これも結構有名になってるんじゃないでしょうか。

音ゲーなんですが、曲に合わせて前からくる立方体を、手に持っている剣(モーションセンサ)で切るというやつです。
シンプルなんですが、VR感とうまくマッチしていて、良ゲーです。
多分今一番やってるのはこのゲームですね。曲と譜面を配布しているサイトもあるので最高です。

モーションセンサをブンブン振り回して、かがんだり移動したりする動作も要求されるので、思ったより運動になります。
プレイしていると汗だくになって、眼鏡がたまに曇るので、眼鏡ユーザーは対策した方がいいです。

DMMVRplayer、360度動画

言わずもがな、えちえちなやつです(360度動画は普通の動画がメイン)。非常に良いですね。
導入に手間取りましたが、大体提供元不明なアプリを許可でどうにかなるっぽいです。

これはDMMVRplayerでみたクマノミ天国
f:id:ta_ichi:20190605000328j:plain

狼と香辛料VR

原作もアニメも見てないんですが、めちゃくちゃ可愛い、萌え。


おわりに

紹介とかいってまだ全然遊べてないので、面白いの見つけ次第記事にしようかな。
今は勧められている東京クロノスが気になっています。

あとVRchatで使うためのアバターとHome空間を作成するために色々調べてます。
こちらもできたら記事にしたいね。