Qstairs

現役AIベンチャーCTOの知見、画像認識(人工知能、Deep Learning)を中心とした技術ノウハウをアップしていきます

広告

【Django】Django始めました

f:id:qstairs:20160601221351j:plain

はじめに

前にRuby on RailsによるWebアプリケーションの開発について勉強しました。

qstairs.hatenablog.com


今回は、Django(これでジャンゴと呼ぶらしい。)を使ったWebアプリケーションの開発を勉強します。
Djangopythonをベースにしたフレームワークです。
pythonということは、
ChainerなんかのDeep Learningを簡単に使えてしまうということです!

環境

今回は以下の環境となっています。
OS:Mac OSX 10.11.6

Django 1.11
python 3.6.1

Webアプリの作成

参考にしたサイトは以下になります。
PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(1)【環境構築編】 - Qiita

基本的にサイトの通りに進めればWebアプリを作ることができました。

ただ、注意点として、
サイトの途中でpythonの実行が「python3」ではなく
python」となっている場所があります。
Django「python3」です。
#Macはデフォルトでpython2.x系がインストールされているため、
#pythonとするとpython2.x系が実行されてしまいます。

ちなみに、所要時間は環境構築合わせて2-3時間ほどでした。




ちょっと脱線

MVC vs MTV 問題

これらは開発のデザインパターン(各機能を分けて整理しよう的な考え)を表す言葉です。
Ruby on Rails等はMVC(Model,View,Controller)を採用(推進?)し、
DjangoはMTV(Model,Templatem,View)を採用しています。

MVCとMTVはどちらも言ってることはおおよそ同じなのですが、
ネット上で争っているらしい...

プログラミングのデザインパターンでさえこれだけ論争が起きているのだから
世の中から争いが消えることは当分なさそうですね(^_^;

最後に

今回はDjangoを用いたWebアプリケーションの基本的な開発について勉強しました。
個人的な感覚では、Ruby on Railsのほうがすっきりしている気がしました。
ただ、Djangopythonをベースにしているということで、
私がこれから開発していきたいサービスを考えると
機械学習が容易に使えるpythonをベースにしているのはとても魅力的です。

今後はDjangoに絞って勉強していきます!!


以上

【ITエンジニアの実情】フリーランスを1か月経験して感じた会社による働き方の違い

f:id:qstairs:20170209000813j:plain

はじめに

3/31で4年間勤めた会社を退職し、
4月からITエンジニアのフリーランスとして働いて1か月がたちました。

私がエージェントに 仕事を探してもらう際に提示した条件は
とにかく残業が少ない職場で!
というものでした。

この条件で仕事を探してもらい、
今の現場の面談を受けた際には
稼働は安定している=残業はほぼない
と聞いていました。
とはいえ、
実際は20時間ぐらいは残業することになるだろうと考えていました。

では、4月も終わったので結果を発表します。
残業時間はなんと、
0時間
でした。
驚くことに毎日18時前には退社するという素晴らしい日々を送っています。

また、仕事内容はと言いますと、
1つの作業を余裕のある納期で進めるという
前の会社ではありえない状況に困惑しています。
#もちろん、入って間もないため納期に余裕を持たせてもらっていますが。

ちなみに、前の会社では3~6の案件を並列に進めていき、
中には短納期なものもありました。

なんで同じIT業界で働き方に差が出てしまうのでしょうか。

私が思うに、以下3点が理由として挙げられるのではないでしょうか。

  1. 扱う技術の違い
  2. 顧客を固定できるか
  3. 顧客が業界トップシェアか

では、それぞれに関して以下に記載していきます。



扱う技術の違い

働き方に差が出る理由の1つ目としては、
扱う技術が全く異なることが原因ではないかと思います。
つまり、世間に定着した技術か未知の技術かということです。

前の会社では、最先端の技術を使用した案件がほとんどでした。
最先端の技術は顧客も「相場」が分からないため、
どうしても低く見積もられます。
また、先陣切って最先端の技術を使いたいと言ってくれる顧客は少なく、
こちらとしては何とかして受注したい、実績を残したいという思いがあるため、
比較的少額で短納期でも受けざる負えない場合もあります。

一方、定着した技術は、
基本的にある程度の市場規模が確立されているため、
(だからと言って儲かるというわけではない)
顧客もその技術の「相場」を(調べれば) 理解でき、
双方納得した上で受注しやすくなります。

つまり、扱う技術によって、
顧客と受託側のパワーバランスが変わることで働き方に差が出ているのではないでしょうか。

顧客を固定できるか

働き方に差が出る理由の2つ目としては、
顧客を固定できるかという点です。

顧客が固定されるとどうなるか、
顧客にとっても受託側にとっても互いを切り離せない関係になります。
つまり、信頼関係が生まれます。

するとどうなるか、
顧客もある程度のことであれば受託側の意見を聞き入れるようになります。
よって、開発内容に関しても、納期に関しても受託側には余裕を持たせることができます。

ただ、顧客を固定すると様々な問題がありますが...

顧客が業界トップシェアか

働き方に差が出る理由の最後としては、
顧客が業界でトップシェアかという点です。

顧客が業界でトップシェアだと何が良いのかというと、
簡単に言えば、お金を持っている(可能性が高い)ということです。

顧客がお金を持っていると、買い叩かれる可能性が減ります。



最後に

いかがでしょうか。
正社員として4年間、フリーランスとして1か月働いた中で感じた、
会社(職場)による働き方の違いの原因についてまとめました。

ただ、個人的な肌間隔によるもので、
定量的な数値を使用しているわけではありません。
なので、( ´_ゝ`)フーンという感じで受け取っていただければと思います。



「一人でも多くのITエンジニアに幸せになってほしい。」

そう願う限りです。

【Deep Learning】NNの重みの傾向(差分とヒストグラム)

f:id:qstairs:20160601221351j:plain

はじめに

前にNNの重みに関する見解を書きました。
そこでは、以下のようにまとめていました。

学習による割り当てられる重みの初期値の差異は大きく、
繰り返し学習による重みの変化は小さいことが分かった。

これらから、NNモデルの学習では重みの初期値が重要になることが分かる。

今回は、MNISTを使用し、
重みの初期値と学習終了時の差分
学習終了時の重みのヒストグラムを求めて
NNの重みの傾向を探っていきます!


qstairs.hatenablog.com

学習モデル

今回はMNISTを使用し、以下のモデルで学習しました。
#MNISTの取得方法はこちら

self.model = FunctionSet(
      l1 = L.Linear(784,1000),
      l2 = L.Linear(1000,1000),
      l3 = L.Linear(1000,10),
)

重み(l1)の傾向

初期値と学習終了時の重みの最大差分(絶対値)

最大差分 ⇒ 0.0065

学習終了時の重みのヒストグラム


重み(l2)の傾向

初期値と学習終了時の重みの最大差分(絶対値)

最大差分 ⇒ 0.0041

学習終了時の重みのヒストグラム

重み(l3)の傾向

初期値と学習終了時の重みの最大差分(絶対値)

最大差分 ⇒ 0.0246

学習終了時の重みのヒストグラム

まとめ

今回はMNISTによるNNの重みについて調査しました。
結果として、重み(l3)が最も初期値から学習終了までに変化する量が多くなりました。
これは、l3は1000次元から10次元に大きく減少している、
かつ、誤差量の影響が大きいためでしょうか。

また、重みのヒストグラムを見るとどれも同じような傾向になりました。
重み0に近くなるにつれて割合が多くなるのは興味深いですね。


【Deep Learning】fetch_mldataでmnistのデータを取得できない場合の対処(Chainerの場合)

f:id:qstairs:20160601221351j:plain

はじめに

mnistを使った実験を行いたい場合、
これまでは「fetch_mldata」でmnistのデータを取得していましたが、
どうやら取得できなくなっている模様です。
#Irisは取得できています。

そこで、fetch_mldataではなく
Chainerにあるmnistを取得する関数を使おうとしました。

ところが、データ形式がfetch_mldataとは異なっていて困った。
なんとかfetch_mldataの形式に合わせる処理を作ったので紹介します。

fetch_mldataの場合

mnist = fetch_mldata('MNIST original', data_home=".")
# mnist.data : 70,000件の28x28=784次元ベクトルデータ
mnist.data = mnist.data.astype(np.float32)
mnist.data /= 255  # 正規化

# mnist.target : 正解データ
mnist.target = mnist.target.astype(np.int32)

# 学習用データN個,検証用データを残りの個数に設定
N = 60000
xtrain, xtest = np.split(mnist.data,      [N])
ytrain, yans = np.split(mnist.target,    [N])

Chainerでmnistを取得しfetch_mldataの形式に変換

各変数がfetch_mldataと対応しています。

train, test = chainer.datasets.get_mnist()
train = np.array(train)
test = np.array(test)
xtrain = []
ytrain = []
for data, label in train:
    xtrain.append(data)
    label_list = np.zeros(10)
    label_list[label] = 1.0
    ytrain.append(label_list)
xtrain = np.array(xtrain).astype(np.float32)
ytrain = np.array(ytrain).astype(np.float32)

xtest = []
yans = []
for data, label in test:
    xtest.append(data)
    yans.append(label)
xtest = np.array(xtest).astype(np.float32)
yans = np.array(yans)


以上!

【人工知能】うどん工場にもAIが!?

f:id:qstairs:20170424211556j:plain

製麺業の川田製麺(高松市、川田明義社長)は、高松東ファクトリーパーク内の自社工場(さぬき市)に人工知能(AI)機能を搭載した検知器やIoT(モノのインターネット)技術を今秋に導入する。


うどん工場に人工知能 川田製麺 不良品検知、学習で進化 今秋導入 | うどん関連ニュース | 讃岐うどん遍路 | 四国新聞社


X線の画像を使用して包装の不良品を検知するとのこと。

気になるのは、検知精度ですね。

X線の画像なので、可視光に比べると検知しやすいとは思いますが、
果たしてどれほどの精度があるのでしょうか?

また、記事の中に、

使用回数が増えるごとに“進化”して検知の精度が向上する

とありますが、どうやって進化するのでしょうか。

導入している人工知能の出力をそのまま使用している場合、
人工知能が一度間違った出力してしまうと真実とは間違った方向にどんどんずれていくように思うのですが。
#正解を人が教えている?

どういうアルゴリズムなのか気になりますね。

【IT】コンビニの全商品に電子タグが!

f:id:qstairs:20170418201055j:plain

経産省は「コンビニ電子タグ1000億枚宣言」を策定。2025年までに、コンビニ大手5社の全商品、年間約1000億個に電子タグを取り付けるという。


www.itmedia.co.jp


この電子タグは購入した後も商品に取り付けたままなのでしょうか?


仮にそうだった場合、
今のところ消費者が商品を買ったあとでも
この電子タグを使用してさらに面白いことができそうですね!


例えば、ごみ箱でこの電子タグの読み取ることで、
商品の実際の消費地域が見える化され、商品開発や出店場所の選定に活かされます。
#ちょっと無理矢理ですね(^_^;

他にはスマホで読み取って摂取カロリーの計算とか。
#これは良さそうですね!

新しいビジネスが生まれそうです!

関連記事

qstairs.hatenablog.com

【Rails】Ruby on Rails始めました

f:id:qstairs:20160601221351j:plain

はじめに

現在のITサービスにおいて、
Webサービスは切っても切れないものになっています。
そんな中で事業を作っていく身としてはWebサービスはできませんでは話になりません。
ということで、Webアプリの開発が容易だという「Ruby on Rails」の勉強を始めました。

今回やったことは以下の2点になります。

  • 環境構築
  • 簡単なRailsアプリの作成

#環境はMac OSです。

環境構築

私は以下のサイトを参考にしました。
最初は他のサイトを参考にしていましたが途中うまくいかず、
以下のサイトに行き着きました。
【El Capitan】Mac OSX 10.11 El Capitan にRuby + Rails4 開発環境の構築 【初心者必見】 - Qiita

簡単なRailsアプリの作成

環境構築まで完了した後、以下のサイトを参考に簡単なRailsアプリを作成しました。
タイトルにあるように、「小学生でもわかる」ということで
どんなものかと思い選んでみたところ、
とてもわかりやすかったです。

小学生でもわかるRuby on Rails入門 | OpenBook

ただ、ITリテラシーが低い方にとってはちょっと難しいかなと思います。(^_^;
ただ、行き詰まった際には関連するサイトを探して解決していけば問題ないかと思います。

最後に

今回はRuby on Railsの環境構築と簡単なRailsアプリの作成を行いました。
感想としては、「これは便利!!」の一言です。
というのも、画面と処理とDBが同じ環境内に収まっているので、
そういった各モジュールとの連携で悩む必要がありません。

今後はスマートフォンのアプリとの連携を含めた
Webサービスの開発まで検討していこうかと考えています。

広告