栄達の神は待たない

とある大学生が自らの技術力の向上と知識を得るモチベーションUPのための自己満ブログ。

2月1日進捗

本日の進捗

「HTML&CSS 初級編」を修了

振り返り

非常にわかりやすい説明でスムーズに進めることができました。

見やすいデザインのWebページを作るのに ボックスモデル が重要だな~と思いました。

ボックスモデルというのはHTMLでの余白に関する概念です。

枠線「border」に対して、内側の余白が「padding」、外側の余白が「margin」。

今後の方針

明日からは「HTML&CSS 中級編」に入ります。

中級編修了時、理解度が高ければ試しに簡単なWebページを作りたいと思います。

理解度が低ければProgateでの復習に入ります。

Webプログラミング始めます

お正月前に記事を書いてから全然更新ができていませんでした。

春休みは毎日更新できるように努力します。

先日、とある技術系youtuberの動画を見ました。その内容は、大学生でWeb系のプログラミングを学べば、アルバイトせずに稼ぐことができるという話です。

私は稼げるというワードに惹かれてしまいました。もともとWeb系のプログラミングに興味があり、Rubyを少し勉強していました。

そこで、

春休みは毎日Progateで勉強しよう!

具体的には何をするのか?

このあたりを毎日少しでも勉強していきたいと思います。

あと、ブログの更新癖をつけるためにやった内容を毎日まとめるようにします!

やっぱりPythonだな!

ついに12月に入りました。今年ももうすぐ終わりです。

だからと言って特に変わることはないんですけど…

1つ前の記事で「VBA使って自動化するぞぉぉ」って意気込んでたんですけど、やめることにしました。

なぜか?

VBAってエクセルしか自動化できなくね? って思っちゃったから。

わざわざVBA使うくらいならもっと便利なのあるじゃん!

誰でも簡単プログラミング!Python

ということでPythonで自動化していくことにしました。

もともとPythonはやっていたので python 3.6 と anaconda が入っていました。

なのでjupyter notebookを使えばよかったんですが、あえてatomで作ってみることにしました。

環境構築

まず、Atomからダウンロードしてくる

てきとーにインストール

ここからが大事!

パッケージの追加!

atompythonを始めるには初期状態のatomじゃ不便。

そこで活躍するのがパッケージ拡張機能的な?)!

パッケージのインストールはすごく簡単。

f:id:utageer:20181205070032p:plain

ここで入れたいパッケージを探すだけ!

今回入れたパッケージ

  • autocomplete-paths

  • color-picker

  • symbols-tree-view

  • highlight-line

  • highlight-selected

  • minimap

  • auto-complete-python

  • atom-beauty

  • linter

  • linter-python

  • Python-Debugger

今回はこれだけ入れましたが、有用なパッケージはまだまだありそうです。

それぞれのパッケージについては別の記事でまとめようと思います。

ということで無事環境が整ったので

Pythonによる自動化初めて行きたいと思います!

ひっさしぶりの投稿。今後どうするか。

とても久しぶりの投稿です。

大学が忙しく、いつの間にか1か月振りの投稿となってしまいました。

最初は「 1日1記事 」と思って始めたブログでしたがすぐに投稿が止まってしまいました。

実は時々「書こうかなぁ」とは思っていたんですが、「明日やろう」、「週末やろう」と先延ばしにしてしまっていました。

しかし、昨日(11/28)このままではいけない!と思って気合いを入れ直しました。

ということで、今日からは「1週1記事」を目標にやっていきます!

(しょぼくなったとかは言わないで)

今後何をするのか

前々から思っていたんです。

PCで行う作業を出来る限り自動化していきたいな! って。

それで思い出したんです。

確か VBS で色々出来たよな?って。

以前、ほんの少しだけ VBSに触れたことがありました。

でも、ホントにほんの少しだったので VBS の事を全く覚えてませんでした。

そこでVBSを調べました。いろいろ調べました。

すると、VBAのほうが良いことが分かりました。

(詳しくは今度、記事にしてまとめようと思います。)

結論!

VBAでいろいろ自動化できるようにする!

あと、記事を書いていない間も、Python機械学習についてはいろいろ勉強していたので

継続していきます。

相も変わらず拙い文章ですいません。

良い記事が書けるように精進していくのでよろしくお願いします。

TensorFlow-GPUをインストールしてみた

環境

前提

  • anaconda入ってる

  • すでにTensorFlowでいろいろやってた

インストール手順(ざっくりと)

  1. Visual Studio 2017をMicrosoft からダウンロード。exeを起動しインストール

  2. CUDAとCUDNNをNVIDIAからダウンロード

  3. CUDAはそのままexeを起動してインストール

  4. CUDNNを解凍

  5. 解凍して出てきたbinフォルダたちをC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2 内に上書きコピー

  6. anaconda promptを起動して以下コマンドを実行

activate 仮想環境名
pip uninstall tensorflow
conda install tensorflow-gpu

以上で完了。

その後

tennsorflow自体はできているはずなのだが

# kの更新に利用するパラメータ
GAMMA = 0.5
LR_K = 0.001

# 繰り返し数。100000〜1000000程度を指定
TOTAL_STEPS = 100

# モデルや確認用の生成画像を保存するディレクトリ
MODEL_SAVE_DIR = 'began/models'
IMG_SAVE_DIR = 'began/imgs'
# 確認用に5x5個の画像を生成する
IMG_SAMPLE_SHAPE = (5, 5)
N_IMG_SAMPLES = np.prod(IMG_SAMPLE_SHAPE)


# 保存先がなければ作成
os.makedirs(MODEL_SAVE_DIR, exist_ok=True)
os.makedirs(IMG_SAVE_DIR, exist_ok=True)

# サンプル画像用のランダムシード
sample_seeds = np.random.uniform(
    -1, 1, (N_IMG_SAMPLES, z_size)
)

history = []
logs = []

for step, batch in enumerate(train_data_generator):
    # サンプル数がBATCH_SIZEに満たない場合はスキップ
    # 全体の画像枚数がBATCH_SIZEの倍数出ない場合に発生
    if len(batch) < BATCH_SIZE:
        continue
    
    # 学習終了
    if step > TOTAL_STEPS:
        break

    # ランダムな値を生成
    z_g = np.random.uniform(
        -1, 1, (BATCH_SIZE, z_size)
    )
    z_d = np.random.uniform(
        -1, 1, (BATCH_SIZE, z_size)
    )
    
    # 生成画像(discriminatorの学習に利用)
    g_pred = generator.predict(z_d)
    
    # generatorを1ステップ分学習させる
    generator.train_on_batch(z_g, batch)
    # discriminatorを1ステップ分学習させる
    _, real_loss, fake_loss = discriminator_trainer.train_on_batch(
            [batch, g_pred],
            [batch, g_pred]
    )

    # k を更新
    k_var += LR_K*(GAMMA*real_loss - fake_loss)
    K.set_value(k, k_var)
    

    # g_measure を計算するためにlossを保存
    history.append({
        'real_loss': real_loss,
        'fake_loss': fake_loss
    })

    # 1000回に1度ログを表示
    if step%1000 == 0:
        # 過去1000回分の measure を平均
        measurement = np.mean([
            measure(
                loss['real_loss'],
                loss['fake_loss'],
                GAMMA
            )
            for loss in history[-1000:]
        ])
        
        logs.append({
            'k': K.get_value(k),
            'measure': measurement,
            'real_loss': real_loss,
            'fake_loss': fake_loss
        })
        print(logs[-1])

        # 画像を保存  
        img_path = '{}/generated_{}.png'.format(
            IMG_SAVE_DIR,
            step
        )
        save_imgs(
            img_path,
            generator.predict(sample_seeds),
            rows=IMG_SAMPLE_SHAPE[0],
            cols=IMG_SAMPLE_SHAPE[1]
        )
        # 最新のモデルを保存
        generator.save('{}/generator_{}.hd5'.format(MODEL_SAVE_DIR, step))
        discriminator.save('{}/discriminator_{}.hd5'.format(MODEL_SAVE_DIR, step))

このサンプルプログラムを実行すると

InternalError: Blas GEMM launch failed : a.shape=(16, 32), b.shape=(32, 4096), m=16, n=4096, k=32
     [[{{node dense/MatMul}} = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_dense_input_0_0/_143, dense/MatMul/ReadVariableOp)]]
     [[{{node conv2d_8/BiasAdd/_145}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_158_conv2d_8/BiasAdd", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

エラーが起きてしまう。

ほかのプログラムを試してみても

 Blas GEMM launch failed

というエラーが起きる。

今日は目が疲れたので明日続きをやろうと思う。

今日のまとめ

Tensorflow-GPUの使い方が分からねぇぇぇぇぇぇ (ゲームならGPU簡単に設定されるけど、プログラムにどうやって適応すればええの?)

GANを調べてみた

GAN

敵対的生成ネットワーク(Generative Adversarial Network)の略。 2つのネットワークが競い合うように学習していく教師なし学習のモデル。 ジェネレータ(Generator)が訓練データをもとに似たような新しいデータを生成し、ディスクリミネイタ(discriminator)がそれを判断することで学習していく。

CDGAN

深層畳み込み敵対的生成ネットワーク(Deep Convolutional Generative Adversarial Network)の略。 GANに畳み込みネットワークを利用したもの。