Dockerにtensorflowを組み込んでDeep Learningしてみる

はじめに

機械学習やら色々な新しい事を実践的に試すべく エロサイトを開発中。モトダチ 開発実践用にオープンしているので広告は入っておりませんのでお気軽にどうぞ。 色々工夫したアプリケーションの作りになっているのでレスポンスは速いはず。

今回のミッション

dockerにTensorFlowをインストールしてDeep Learningを使う環境を構築する

TensorFlowとは

大規模な数値計算を行うライブラリ。 機械学習や深層学習が実践できるが、それだけでなく汎用的な仕組みを提供。 テンソルというの多次元行列計算のこと。

Windows/MacOS/Linuxと各種OSで動かすことが可能で、PythonJava、Go、C言語とさまざまな言語から利用可能。 機械学習のライブラリとして人気が高く資料も充実。

Dockerのインストール

Windowsの人 https://docs.docker.com/docker-for-windows/install/ Macの人 https://docs.docker.com/docker-for-mac/install/

Docker fileの作成

これを適当なワーキングディレクトリに「Dockerfile」として作成

FROM ubuntu:16.04
MAINTAINER test@test.com

ENV LANG C.UTF-8

# install for Python
RUN set -x && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
        build-essential \
        curl \
        libfreetype6-dev \
        libpng12-dev \
        libzmq3-dev \
        pkg-config \
        python3 \
        python3-dev \
        python3-pip \
        python3-setuptools \
        python3-wheel \
        gcc \
        git \
        rsync \
        software-properties-common \
        libgtk2.0-dev \
        libavcodec-dev \
        libavformat-dev \
        libswscale-dev \
        libopencv-dev \
        libdc1394-22 \
        libdc1394-22-dev \
        libjpeg-dev \
        libpng12-dev \
        libtiff5-dev \
        libjasper-dev \
        libavcodec-dev \
        libavformat-dev \
        libswscale-dev \
        libxine2-dev \
        libgstreamer0.10-dev \
        libgstreamer-plugins-base0.10-dev \
        libv4l-dev \
        libtbb-dev \
        libqt4-dev \
        libfaac-dev \
        libmp3lame-dev \
        libopencore-amrnb-dev \
        libopencore-amrwb-dev \
        libtheora-dev \
        libvorbis-dev \
        libxvidcore-dev \
        x264 \
        v4l-utils \
        unzip \
        nano \
        language-pack-ja \
        fonts-ipafont \
        && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN set -x && \
#   pip3 install --upgrade pip && \
    pip3 --no-cache-dir install \
        requests \
        setuptools \
        Pillow \
        nose \
        h5py \
        ipykernel \
        jupyter \
        matplotlib \
        mlxtend \
        numpy \
        pandas \
        scipy \
        sklearn \
        seaborn \
        opencv-python==3.4.0.12 \
        tensorflow==1.5.0 \
        keras==2.1.4 \
        flask

RUN set -x && \
    mkdir -p /root/.config/matplotlib && \
    echo 'backend : Agg' > /root/.config/matplotlib/matplotlibrc && \
    echo 'font.family : IPAPGothic' >> /root/.config/matplotlib/matplotlibrc


ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8

dockerイメージをビルド

Dockerfileが置いてあるワーキングディレクトリ内で下記コマンドを走らせる。 sample-nameはお好きな名前にどうぞ

docker build -t sample-name .

ビルドしたイメージを実行

docker run -it -p 8888:8888 -v `pwd`:/src sample-name

次回からの起動法とコンテナへの接続方法(Dockerの基本操作)

#コンテナ一覧を取得
docker ps -a #これでDockerの一覧を取得。コンテナIDが重要

#コンテナの起動
docker start CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

#コンテナの停止
docker stop CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

#コンテナの再起動
docker restart CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

#コンテナに接続
docker attach CONTAINER-ID #上のコマンドで見えるコンテナIDを入力

TesorFlowのインストール

#コンテナに接続した状態で
pip install --upgrade tensorflow==1.5.0

これだけ、簡単ですな。

最後に

モトダチ是非是非よろしくお願いします!!

色々意見頂けると開発のモチベーションが上がります。 何かあればぜひコメント下さい。

python3でMeCabがインストールできない。エラーegg_info

概要

開発中のエロサイトモトダチを言語処理させたい思いつく。(手前味噌ながら裏側で色々走っている) Python形態素解析器のMeCab自然言語処理のライブラリのgensimの利用を試みる

作業

環境はUbuntu,Debian系。CentOSとかでもapt-getをyumに変えるだけでいけるはず。

MeCabMecabのライブラリ、基本辞書のツールをセットアップ

apt-get install mecab libmecab-dev mecab-ipadic-utf8
apt-get install git make curl xz-utils file sudo

mecab-ipadic-NEologdeをインストール

git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n -p /var/lib/mecab/dic/mecab-ipadic-neologd

インストールして良いか尋ねられるので「yes」とうつとインストールが完了

Pythonで使えるように。

pip3 install gensim

mecab-python3のインストール

pip3 install mecab-python3

ここでエラーが発生

Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/db/zj9vr1xx11vdn8yzb3bvp6xw0000gn/T/pip-install-31zuvfh1/mecab-python3/

Setup.pyを書き換えたり、pipをアップデートしたりしたが効果なし。 英語でも色々格闘したけど効果なし。

mecab-pythonのパッケージを直接インストールしてみた。 ソースをダウンロード→解答→インストール ※人によったらpython3のコマンドの場合も。バージョンを確認してみて下さい。

wget https://files.pythonhosted.org/packages/1e/50/86ac8277b89c256509c934656be69ff7aef0ce795cac185b0222f44b8196/mecab-python3-0.8.2.tar.gz
tar zxfv mecab-python3-0.8.2.tar.gz
cd mecab-python3-0.8.2
python setup.py build
sudo python setup.py install

これ無事PythonMecabが使えるようになりましたよっと。

最後に

モトダチ是非是非よろしくお願いします!!

色々意見頂けると開発のモチベーションが上がります。 何かあればぜひコメント下さい。

海外在住駆け出しエンジニアがエロサイト構築してみた

どうも。海外在住、24歳駆け出しエンジニアです。 このエントリーでは、僕が作ったエロサイトをこれまでの経緯を踏まえて紹介したいと思います。

作成したエロサイト

motodachi.me

よくあるエロサイトですが、 世のスケベ紳士たちのペルソナを堀りに掘って実装したこだわりポイントみたいなのも随所にあります。
このサイトを使ってシコりまくってくれると嬉しいです。(直球)

「モトダチ」という名前なんですが深い意味はないです。
エロっていうキーワードをSEOの観点から避けたかったのと、あとはこのサイトを一緒に作った友達と僕の名前をいじって考えました。

使えば使うほどパーソナライズされていい動画が見つけやすくなる、スルメのようなサイトです。このサイトを使ってイカ臭くなりましょう。

開発の経緯

元々、文系卒で未経験エンジニアとして新卒入社し日本で働いていました。

・・・ええ。1年ほどでやめました。

巷によくいるのかわからないですが、当時の僕の周りにはよくいたエンジニアとして入社したのに、 エクセルぽちぽちタスクばかりで、業務でコードが全く書けないことに不満を持ってました。

そんなこんなで悶々と日々を過ごしながら、転職の機会を伺っていたところ、
知り合いの紹介で今の会社の社長(外国人)と出会い、エンジニアとして海外に転職することに決めます。
なぜ雇ってくれたのかは今でも謎です。

当時の上司に辞めることを伝えたり、諸々の準備、有休消化などでいざ海外転職するまでに少しの時間ができました。
そこで何か本気で作ってみようと思い立ち、友達を誘って作成し始めたのが「モトダチ」です。

モトダチについて

せっかくならユーザーが喜ぶものをということで色々と試行錯誤し、以下のようなサイトだと変態紳士が喜ぶのではと思い至りました。
(僕と友達でこういうのあったら便利じゃね?と思った機能たちです。ぶっちゃけただの自己満です。オナニーです。)

1. 動画が*多い* 
2. ストレスなくいい動画を見つけることができる*速さ* 
3. ちょっとでもいいなと思った動画を簡単に*ストックできる*
4. 各ユーザーへの*パーソナライズ*


そこで、下記のような要件を満たすサイトを作りました。

1. 動画数を増やすために、色々な動画サイトからスクレイピングする
2. キャッシュのフル活用でページの表示速度をあげる
3. お気に入り機能、閲覧履歴機能、あとで見る機能(今後)の実装
4. 各ユーザーごとに異なる動画をおすすめするパーソナライズされたおすすめ動画機能

ぜひお試しください!!!!! motodachi.me

開発に必要なスキルについて

なんか文章で書くと、簡単に一瞬で作ってる感じしますけど普通に難しかったです。
ちなみにモトダチで使っている技術はざっと以下のような感じです。
HTML
CSS
python
redis
mongo
flask

その時の僕の技術レベルは初心者にちぢれ毛が生えた程度です。 学生時代に1ヶ月プログラミング教室に通ったことがあるくらいのレベルです。 プログラミング教室自体はwebアプリの学習としてよかったのですが、いかんせんその後に勉強もあまりしなかったですし、もちろんよくいるリリース童貞(肩書きは一応エンジニアだが自分でサービスをリリースしたことがない人)で実装は大変でした。 有休消化期間で時間があったこと、友達が僕より数億段強いエンジニアだったことでちょっとずつ理解してなんとか形になった感じです。ほんと感謝です。

ユーザー集めに関して

本当に苦慮しています。正直、このエントリーもユーザーが少しでも増えてくれればいいなと思って書いてます。 現在、ユーザー集めに関しては以下のような施策を打っています。

1. エロ動画まとめサイトを作って、「モトダチ」内の動画を紹介する
2. Qiitaに、「モトダチ」に関する技術記事を投稿する
3. このエントリー

1のまとめサイトはまだまだ結果が全然出せておりません。そもそもまとめサイト自体の流入を増やさなければならないので、相互リンクなどを駆使しつつ頑張っている最中です。
気合い入れて記事量産した日は、流入が少し増えるので継続してやっていきたいと思います。ここからの流入はシコる気まんまんの人たちのはずなので、良質なOX(オナニーエクスペリエンス)を提供できるように頑張ります。

2のQiita記事は、普通に書けば数百ページビューはいくのでユーザー集めに関してはいい方法だと思います。 いいねがつくような記事をかければ、数千ページビューになるので、そのうち「モトダチ」を見てくれてかつ気に入ってくれて、実際にシコってくれる人を増やすために、サイト自体のクオリティもどんどん上げていかないとですね。

3に関しては、今このエントリーを読んでいるみなさんお願い致します。ぜひココからサイトに飛んでいただいて、パンツ降ろしていただいて、利き手をちんこに添えて、シコっていただけると嬉しいです。

今後やっていきたいこと

何はともあれまずはアクセスです!!!!現状、直接流入の施策は打っているもののあまり結果出せていないです。とは言ってもすぐに結果が出るものでもないと思うので、地道にやっていくしかないですね。
それと並行して、検索流入を増やす施策も打っていきたいと思っています。
パッと思いつくのは、

・スクレイピング時にタイトル変更
・インデックスされてないページをインデックスさせる

とかですが、あんまりよくわかりません。。。
アクセス増やす方法について、何かアドバイスいただけると感謝・感激・雨嵐っす、、、(土下座)

また、機能に関しては、
以下のような機能を実装していきたいと思っています。

1. あとで見る 
2. コメント
3. カテゴリー別ランキング
4. 検索ワードランキング

実装はたのしいですね。仕事もしないとなので、がっつり時間取れないですが何とか作っていきたいです。

最後に

とまぁこんな感じです。ちょくちょくネットで自分が作ったサイトを紹介(ニートが〜〜とか、フリーターが〜〜とか)しているのを見るので、それに乗っかって書いてみました。
はい、宣伝です。宣伝なんですが、せっかく作ったし良いサイトにしたいと思ってるので、みなさんよろしくお願いいします。アクセス頑張って増やすプロセスとか開発とか普通に楽しいですし、これからも飽きない限り新しい機能とかは増やしていくので是非是非「モトダチ」を使ってOX(オナニーエクスペリエンス)を向上させてください!!
最後まで読んでいただきありがとうございました!!