Deep Autoencoder でMNISTを学習

Deep Autoencoder を用いてMNISTの学習を行ってみました。

 

エンコーダーは724次元→128次元→64次元→32次元

デコーダーは32次元→64次元→128次元→724次元

最適化の方法は adadelta

損失関数は binary crossentropy

なお、畳み込みなし。

学習データはMNIST(学習用60,000個、評価用10,000個)

 

結果:

(以下の画像は上段が入力画像、下段が出力画像です)

初期段階(epoch=1)

 

epoch=10

 

epoch=100

 

学習が進みにしたがい、Autoencoderの再現がうまく行くようになっている様子がわかります。

(AI開発用メモ) 17 Category Flower Datasetの準備

http://www.robots.ox.ac.uk/~vgg/data/flowers/17/

 

より、Dataset images をダウンロード。ファイル名は17flowers.tgz

 

展開すると、jpg/フォルダにimage_xxxx.jpg とfiles.txt*が生成される。

 

これを整理する。

 

まず、files.txt* をrm

 

次に、以下の内容の書かれたlabels.txtを作成。

 

1 80 Tulip
81 160 Snowdrop
161 240 LilyValley
241 320 Bluebell
321 400 Crocus
401 480 Iris
481 560 Tigerlily
561 640 Daffodil
641 720 Fritillary
721 800 Sunflower
801 880 Daisy
881 960 ColtsFoot
961 1040 Dandelion
1041 1120 Cowslip
1121 1200 Buttercup
1201 1280 Windflower
1281 1360 Pansy

 

次に、以下のsetup.pyを作成

 

import os
import shutil
import random

IN_DIR = 'jpg'
TRAIN_DIR = 'train_images'
TEST_DIR = 'test_images'

if not os.path.exists(TRAIN_DIR):
    os.mkdir(TRAIN_DIR)

if not os.path.exists(TEST_DIR):
    os.mkdir(TEST_DIR)

# name => (start idx, end idx)
flower_dics = {}

with open('labels.txt') as fp:
    for line in fp:
        line = line.rstrip()
        cols = line.split()

        assert len(cols) == 3

        start = int(cols[0])
        end = int(cols[1])
        name = cols[2]

        flower_dics[name] = (start, end)

# 花ごとのディレクトリを作成
for name in flower_dics:
    os.mkdir(os.path.join(TRAIN_DIR, name))
    os.mkdir(os.path.join(TEST_DIR, name))

# jpgをスキャン
for f in sorted(os.listdir(IN_DIR)):
    # image_0001.jpg => 1
    prefix = f.replace('.jpg', '')
    idx = int(prefix.split('_')[1])

    for name in flower_dics:
        start, end = flower_dics[name]
        if idx in range(start, end + 1):
            source = os.path.join(IN_DIR, f)
            dest = os.path.join(TRAIN_DIR, name)
            shutil.copy(source, dest)
            continue

# 訓練データの各ディレクトリからランダムに10枚をテストとする
for d in os.listdir(TRAIN_DIR):
    files = os.listdir(os.path.join(TRAIN_DIR, d))
    random.shuffle(files)
    for f in files[:10]:
        source = os.path.join(TRAIN_DIR, d, f)
        dest = os.path.join(TEST_DIR, d)
        shutil.move(source, dest)

 

 

JDLA Deep Learning for General 2019#1に合格

松尾豊氏が理事長をしている一般社団法人日本ディープラーニング協会

JDLA Deep Learning for General 2019#1

に合格しました。

 

ディープラーニング ジェネラリストを名乗れます。

 

ディープラーニング ジェネラリストは、

ディープラーニングの基礎知識を有し、

適切な活用方針を決定して

事業応用する能力をする人材

(日本ディープラーニング協会HPより)

 

とされています。

 

ディープラーニングG検定を受けてみた

昨年より、知的好奇心を満たすため、

ディープラーニング技術について勉強してます。

 

もともとは好奇心が動機ですが、

せっかくなので、

企業さんからのAI導入の相談にも乗れるよう、

体系的に勉強に取り組むことにしました。

 

そんなで、とりあえず今回、

ディープラーニングG検定(ジェネラリスト検定)を受けてみました。

 

日本でAIの牽引をしている松尾豊氏が理事をしている

日本ディープラーニング協会の検定試験です。

 

ディープラーニング「ジェネラリスト」は

 

ディープラーニングの基礎知識を有し、

適切な活用方針を決定して

事業応用する能力を持つ人材

(日本ディープラニング協会のHPより)

 

と定義されています。

 

試験内容は、技術的な内容から、歴史、社会、法律など、とても幅広いものでした。

(ていうか、公式テキストに載ってない試験内容が多かったやんけ)

 

合否の通知は3月15日までに来るとのこと。

 

このところ、知識のための勉強が多かったので、自分でディープラーニングのプログラムを書くのは休んでました。

 

試験も終わったので、またプログラム作りに励みます。

AI VAE(変分オートエンコーダ)

勉強メモ:

 

画像分野の深層生成モデルではVAEとGANがとりわけ良い。

VAEはVariational Autoencoder の略。

(GANについては本日は省略)

 

普通のオートエンコーダでは、入力と出力を同じにするように学習をし、隠れ層は入力データを圧縮表現したものである。

 

VAEでは、入力を固定された表現に圧縮するのではなく、統計分布に変換する(平均と文さんを表現するように学習する)。

入力データが何かの分布にしたがって生成されているものであると考えれば、その分布を表現するように学習をすればよい、というアプローチ。

 

VAEについて重要な参考文献は以下

  1. Tutorial to Variational Autoencoders: https://arxiv.org/pdf/1606.05908v2.pdf
  2. Variational Auto-Encoders and Extensions: http://dpkingma.com/wordpress/wp-content/uploads/2015/12/talk_nips_workshop_2015.pdf
  3. Variational Autoencoders Explained: http://kvfrans.com/variational-autoencoders-explained/
  4. Introduction to variational autoencoders: https://home.zhaw.ch/~dueo/bbs/files/vae.pdf

ものづくり補助金が公募中

ものづくり補助金が公募中です。

(*:正式名称「ものづくり・商業・サービス生産性向上促進補助金」ですが、通称「ものづくり補助金」と呼ばれています)

 

ものづくり補助金は、

中小企業・小規模事業者等が取り組む、生産性向上に資する革新的なサービス開発・試作品開発・生産プロセスの改善に必要な設備投資等を支援するもの

(中小企業団体中央会のHPより)

です。

 

補助額は最大で1,000万円です。

 

ものづくり補助金なんて自分の会社には関係ない、と思われるかもしれませんが、意外にこの補助金活用できます。

 

通称、「ものづくり補助金」と呼ばれていますが、ものづくり以外でも活用できます。

 

自社での活用の可能性については、お近くの専門家にご相談ください。

 

なお詳細は各都道府県の中小企業団体中央会のホームページをご覧ください(都道府県ごとに少しづつ違いますのご注意ください)。

 

愛知県はこちら⇒平成30年度補正「ものづくり・商業・サービス生産性向上促進補助金」について

 

静岡県はこちら⇒平成30年度補正「ものづくり・商業・サービス生産性向上促進補助金」の公募について

 

締切はH31年5月8日(電子申請は5月10日)

 

 

AI VGG-19

今日はメモ的なブログ記事です。

 

VGGー19はILSVRC2012のデータで7.5%のトップ5エラー率を実現した画像認識用のニューラルネットワーク。

学習済みモデルがBVLCのModelZooで公開されている。

このようなデープなモデルは、層を経るごとに入力データを抽象化していく。

途中でデータを抜き出すと、特徴を抽出したデータとして使うことができる。

また、文章生成RNNにつなぐことで、画像脚注付けもできる。

VGG-19以外にも、様々な公開モデルがある。

 

AI GAN(敵対的生成ネットワーク)

ディープラーニングのお勉強、

 

GAN(敵対的生成ネットワーク)について。

 

とりあえず、興味深いやつです。

 

この技術は、

 

生成AIと認識AIを戦わせて学習を進める方法です。

 

画像の生成を例にとると、

生成AIは、「本物っぽい」ニセモノ画像を作り出します。

そして、その画像を認識AIが本物かどうか判定します。

 

認識AIがニセモノと見破れば、生成AIはそれを学習して、

もっと本物っぽい画像を作るようにします.

 

認識AIがニセモノに騙されたら、

騙されたことを学習して、

次はもっと厳しく判定をします。

 

そんなイタチごっこをしながら学習をするのが、GANです。

 

で、やってみました。

 

 

MNISTの数字画像を使ってます。

 

学習の進行とともに生成画像がどんなふうになっていくか並べます。

 

 

 

 

 

 

最初のうちは「砂嵐」の画像だったものが、

学習が進むにつれて数字っぽくなっていってます。

 

今回は残念ながら「メモリ不足」で

クラッシュしてしまいました。

 

上↑の最後の画像がクラッシュ直前のものです。

 

学習を継続できればもっとはっきりとした文字を生成できるようになっていたものと思われます。

 

 

AI オートエンコーダー

久しぶりの投稿です。

 

このところ、「AI」のことをやっています。

 

このブログには、ちょこちょことAI、あるいはディープラーニングに関することも投稿していきます。

 

人に呼んでもらう記事、というよりは、どちらかといえば、自分用のメモや備忘録的な意味合いがあります。

 

さて、今回はオートエンコーダーです。

 

オートエンコーダーは、ニューラルネットワークです。

 

言語はPythonです。

 

from keras.layers import Input, Dense
from keras.models import Model

encoding_dim = 32 # 32 floats -> compression of factor 24.5, assuming the input is 784 floats

input_img = Input(shape=(784,))
encoded = Dense(encoding_dim, activation=’relu’)(input_img)

 

縦横それぞれ28画素の画像、

つまり、

28x28=784次元のベクトルデータを

いったん32次元に圧縮します。

 

次元が大幅に削減されたため、

この段階でかなりの「情報落ち」が発生します。

 

この情報落ちしたデータを今度は・・・

 

decoded = Dense(784, activation=’sigmoid’)(encoded)

autoencoder = Model(input_img, decoded)

 

で、784次元に戻します。

上のコードでは、

784次元⇒32次元⇒784次元

というオートエンコーダーを生成しています。

 

さて、当然、32次元に圧縮した段階で大幅に情報落ちしているため、

通常であれば、これを784次元に戻そうとしても、戻りません(一応、なんらかのデータはできますが・・・)。

 

ところがこのオートエンコーダーを、事前に学習しておくことで、

データを再現できるようになります。

 

学習しておいたデータの特徴を持ったデータを入力すれば、

オートエンコーダーは、その特徴をもとに再現できます。

 

逆に、学習していないデータを入力しても、そのデータを再現できません(ノイズが入る)。

 

さて、実際に、NMISTの数字画像データ6万枚を用いて、オートエンコーダーの学習を行い、

再現させてみました。

 

数字画像、上段が入力、下段が出力です。

全く同じではないものの、人間の目には、同じような画像に見えますね。

 

今日はここまで。

ブログに一旦区切りをつけます

1年間365日、毎日書くと決めて

2017年8月7日にスタートした

このブログですが、

 

今年の8月6日で1年間毎日更新を達成したあと、

だらだらと続いています。

 

なぜ続けているのだろう?

と自分の胸に問うに、

 

毎日更新の日数を途切れさせたくない

という動機になっていると感じています。

 

このような動機で続けるのは、

いかがなものか?

 

仮にですが、

私のクライアント企業が、

だらだらと惰性で何かを続けている、

とします。

 

そのようなクライアントの行動を見たときに、

私はどう思うだろうか?

 

どのようなことを伝えるだろうか?

 

・・・

 

そんな風に考えてみて、

 

このブログの毎日更新は

一旦区切りをつけるべき

判断しました。

 

というわけで、決めました。

明日は更新をしません。

 

今後は、毎日更新ではなくなります。

(ときどき更新はすると思います)

 

本日は、以上です。

 

佐野敏幸(キャッシュフローコーチ®/認定経営革新等支援機関/中小企業診断士)

090-1967-8178

sano.hkm@gmail.com

〒440-0821 愛知県豊橋市春日町2丁目9-3-303

毎月開催! 脱☆ドンブリ経営実践セミナー

 

脱★ドンブリ経営セミナー 2月15日(金)豊橋開催!

「会社のお金の流れが漠然としていてストレスを感じる」

「社員との危機感のズレでストレスを感じる」

そんなお悩みを解消するのが

このセミナーでお伝えしている

「お金のブロックパズル」

を用いた経営です。

定員6名です。

参加ご希望の方は、

お早目にお申込みください。

 

【お申込み/お問い合わせ】

お申込みは

メール(sano.hkm@gmail.com)、

電話(090-1967-8178:佐野)からどうぞ。

お問い合わせもお気軽に。