monomeg Lab. 第2開発室

プログラミングで学んだことの覚書やら、考察ネタやら、なんでもあり

WSL1+外部ストレージ+Pipenvの組み合わせでハマった

Introduction

 Pythonの環境構築を行うツールとして,最近はAnacondaやPipenvなど収まるところに収まってきている感があります。比較的シンプルにPython仮想環境の構築を行うことができ,依存パッケージの再現やデプロイもしやすいです。
 ただ,公式ドキュメント含め多くのサイトではMacUbuntu上でPipenvのインストールを行っていることが多く,WSL上でインストールを行った際のトラブルシューティングを紹介しているサイトがあまりありません。Anacondaはロックインがこわいので,個人的にもPipenvをメインにしたのですが,当初は原因不明のエラーに悩まされました。
 最終的には何とか解決したので,ことの経過を書いてみたいと思います。

続きを読む

【追記あり】セリフからミリオンライブのアイドルっぽさを判定(してみたかった)

[2019/06/06 追記]

ライブラリとしてPyTorchを使ったバージョンを公開しました。結果まで含めたJupyter NotebookをGitHubに上げています。また、推定できるアイドルの人数を7人から50人に増やしました。精度は6割程度ですが…

詳細は後日公開したいと思います。

気軽に試したい方は↓へ!

twitter.com

[追記ここまで]


冬休みに実家に帰ったのですが、することもないし外は寒いし、でも時間はたくさんあるから流行りの深層学習(Deep Learning)でもやるか!と思い、近くの書店で「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」を買って、1週間で1冊終わらせることを目標にちまちまとやっていました。

次にコレを使って何か面白いことでもできないかな〜と思っていたところ、この本でも実装したCNNでテキスト分類ができることを知り、それじゃアイマスのセリフ判定でもやってみるか、と思い立ち実際にやってみました。深層学習とは書いてますが、そこまで深くないと思います。

結果から書くと、今の知識だと7人が限界でした…が、7人までなら未知のデータに対して結構な精度(val_acc: 73.6%)で判定できたので顛末を書いてみます。

続きを読む

NumPyの多次元配列でスライスする

NumPy配列を使ったPythonのコードを読んでいたら、いきなり

a[:,0]

というコードが出てきて困惑していました。(aは2次元配列)

:がスライスだということは知っていましたが、「コンマあるし…コロンしか無いし、なんだこれ…」とか思ってました。

調べていくと、どうも多次元の場合はコンマで区切って範囲指定するらしい。また、Python自体のスライス機能で、:のみは全体範囲を意味することを知りました。

インデックス0で、0次元目のスライスを指定し、インデックス1で1次元目のスライスを指定します。

インデックス1に単に0と数字を指定すると、「1次元目のインデックス0の要素」にアクセスします。その場合、スライスしたリストは別インスタンスの1次元配列となります。

>>> import numpy as np
>>> a = np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a[:]
array([[1, 2],
       [3, 4]])
>>> a[:,0]
array([1, 3])
>>> a[:,0:1]
array([[1],
       [3]])

ややこしい…

「絶対特権主張しますっ!」で学ぶメモリ保護

正確には「IA-32(x86) プロテクトモードにおけるメモリ保護」ですかね…

経緯

数あるデレマス曲の中でも「絶対特権主張しますっ!」という曲は、そのキャッチーなメロディとは対照的に、「『あの女、あの人に優しくされて調子に乗っているけど本命は私なんだからあんまり馴れ馴れしくするな。あの人に近づいて良いのは自分だけ』というようなある種のヤンデレっぽさが垣間見える」曲で知られています。

その歌詞の持つ意味自体は、おおよそ他の2次元アイドルソングでもありそうな内容ではあるのですが、「特権」や「越権」というあまり日常生活では使われない単語がとにかく連発されるため、かなり頭の中に残ります…

そんな感じに頭の中に残った状態で、コンピュータアーキテクチャについて調べていたら「もしかしたら『絶対特権主張しますっ!』でメモリ保護を説明できるんじゃね?」という発想が浮かび、その勢いで家にあった「Linuxのブートプロセスをみる」(KADOKAWA/アスキー・メディアワークス)を読んで、無理やりエントリに落とし込んでみました。

それでは、本題に入ってみます。なお、特に明記しない限り、IA-32 CPU上のLinuxについて説明します。

続きを読む

CentOS7+Phoenix Frameworkで80番ポートを使う方法

タイトルそのまま。デフォルトだと4000番ポートになってるけど、ブラウザでそのままアクセスできるように、80番(http)に変更してみる。

続きを読む

Windows 10にしたらQMediaPlayerがWMV以外再生されなくなったけどとりあえす解決した

タイトルそのまま。厳密にはちょっと違うけど…

事の詳細を記すと、以前まで使用していたノートPCがついに電源すら入らなくなり、「ついに潮時か…」ということで新しくPCを購入しました。 新しいPCでは、Windows 7 Professionalの新規インストールからのWindows 10 Proの無償クリーンインストールを行って、結果的にはWindows 10環境へ完全移行しました。

その後、Windows 10Visual Studio 2013とQt 5.6.1-1 for Windows 64-bit (VS 2013)をインストールし、前回のエントリで使用したプログラムを使って動作検証を行ったのですが、

DirectShowPlayerService::doRender: Unresolved error code 80040266

というエラーが出て動画が再生されなくなってしまいました。その時の顛末と解決法をまとめました。

続きを読む