@mi-quadda

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Kerasを用いたプログラムについての質問

Kerasを用いて学習を行うプログラムを作成したのですが,これで合っているのかがわからず困っています。
中間層の数は1つで、要素数は入力層の要素数と同じになるようにするには中間層の units と input_dim をどのように設定すれば良いでしょうか?
あまりにも初歩的な質問で恐縮ですが,ネットで調べてもわかりやすい解説が見当たらなかったため,ご助言いただけると幸いです。よろしくお願いいたします。

from keras.models import Sequential
from keras.layers import Dense
model = Sequential() #Sequentialモデルの定義
model.add(Dense(units=8, input_dim=3)) #中間層, 活性化関数:なし
model.add(Dense(units=2, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd') #損失関数:binary_crossentorpy, 最適化:確率的勾配法(sgd)

入力データ,出力データは以下の通りです。

import numpy as np
#入力データ
x = np.array([
              [0.0, 0.0, 0.0], 
              [0.0, 0.0, 1.0], 
              [0.0, 1.0, 0.0], 
              [0.0, 1.0, 1.0],
              [1.0, 0.0, 0.0],
              [1.0, 0.0, 1.0],
              [1.0, 1.0, 0.0],
              [1.0, 1.0, 1.0]
])
#正解データ
y = np.array([
              [0.0, 1.0],
              [1.0, 1.0],
              [0.0, 1.0],
              [1.0, 0.0],
              [0.0, 0.0],
              [1.0, 1.0],
              [1.0, 0.0],
              [1.0, 0.0]
])
0 likes

1Answer

最近Kerasを使っていないのでちょっとあやふやな記憶ですが、確か
input_dimは最初のレイヤーにだけ必要な変数で、入力データの次元数、今回でいうと3を指定します。
unitsは確か層の中でいわゆる下のような画像の丸の数を指定します。

image.png

例えばこの画像のようなモデルを作るなら、

.py
model.add(Dense(units=4, input_dim=3)) #input layerとhidden layer1
model.add(Dense(units=4)) #hidden layer2 上のレイヤーからの入力については自動でやってくれる
model.add(Dense(units=1, activation='sigmoid')) #output layer

となります。

つまり質問者さんのデータですと、要素数が入力データの次元数の3という意味でしたら

.py
model.add(Dense(units=3, input_dim=3)) #中間層, 活性化関数:なし
model.add(Dense(units=2, activation='sigmoid')) 

入力データの個数の8ならば質問の通りのモデルでいいかと思います。

それとディープラーニングでは活性化関数こそ核の考え方なので、意図的に活性化関数を抜いていないのであれば、

.py
from keras.layers.core import Activation
model.add(Dense(units=4, input_dim=3)) #input layerとhidden layer1
model.add(Activation('tanh'))
model.add(Dense(units=4)) #hidden layer2 上のレイヤーからの入力については自動でやってくれる
model.add(Activation('tanh'))
model.add(Dense(units=1, activation='sigmoid')) #output layer

などととしてはいかがでしょうか

1Like

Comments

  1. @mi-quadda

    Questioner

    わかりやすく,丁寧なご回答ありがとうございます。

    質問内のモデル作成時に参考にした資料には要素数が何を指すのかについての説明がなかったため,yuuki_2020さんの回答を見てすっきりしました。
    活性化関数についてはまだ私の理解が不十分なため,勉強しようと思います。

    重ねてになりますが,ご回答いただきありがとうございました。
  2. 理解できてよかったです。

    私自身ディープラーニングはネットの記事を見て手探りでいろいろ学んでいったのですが、確かに基本的な部分や関数の引数の説明などはあまりなくて苦労しました。

    また、活性化関数についてあまり理解していないとのことで、「ゼロから作るDeep Learning」という超有名な本をお勧めしておきます。

    この本はディープラーニングについて知識ゼロの人向けに書かれた本で、読み終わればディープラーニングのだいたいの仕組みは理解でき、私自身これが基礎になっています。3740円と少し高いですが、読む価値は十分あると思います。



    https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585

Your answer might help someone💌