入力層作成時の第一引数のユニット数は
とおっしゃっていますが,コードの次の行がわからないのでなんとも言えないので仮定の上で話します.中間層なしであればそこは出力の次元数にするべきですし,中間層としたい場合は下記のようにパラメータを調整する必要があります.
中間層としたい場合で話を進めると,こちらの記事で得た内容と私の経験則で回答いたします.ユニット数は,データの性質次第というのが一般的な答えです.
なので,データの性質を,主成分分析をはじめとする次元削減を用いて調査しつつ,ユニット数を決めるのが一般的な流れになっていると思います.その手間を省いて決めたい場合であれば,入力の$4$つのパラメータの組み合わせを全パターン網羅できる数を試すのが初手だと思います.すなわち,
$$
_4C_1+_4C_2+_4C_3+_4C_4 = 4 + 6 + 4 + 1 = 15
$$
ぐらい1から始めるのが良さそうです.全ての組み合わせをそれぞれのノードが学習してくれればそれでよく,過学習しているのであれば数を減らせば良いのではないでしょうか.基本的には試行錯誤です.必要に応じて増やすことになるかもしれません.したがって,データの性質次第ということになります.
ちなみに中間層の数は特徴空間における飛び地の数に比例させる必要があることも加えておきます.
中間層なしで実装したい場合
2値分類をしたくて1つの出力でよければ,下記コードで実装できます.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import plot_model
model = Sequential()
model.add(Dense(1, activation = "sigmoid", input_shape = (4,)))
plot_model(model, to_file = "model.png", show_shapes = True)
状態としては次の図のようになります2.
出力されるmodel.pngは
ですね.
中間層ありで実装したい場合
中間層1層で2値分類をしたい場合は
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import plot_model
model = Sequential()
model.add(Dense(15, activation = "relu", input_shape = (4,)))
model.add(Dense(1, activation = "sigmoid"))
plot_model(model, to_file = "model.png", show_shapes = True)
状態としては次のようになります2.
出力されるmodel.pngは
ですね.場合によってはめちゃくちゃ過学習しそうです.
自分語りになってしまって申し訳ないのですが,個人的には名前を付けやすいことから次の書き方を好んで使います.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras.utils import plot_model
model = Sequential()
model.add(Input(shape = (4,), name = "InputLayer"))
model.add(Dense(15, activation = "relu", name = "HiddenLayer"))
model.add(Dense(1, activation = "sigmoid", name = "OutputLayer"))
plot_model(model, to_file = "model.png", show_shapes = True)
model.pngにおいて名前がちゃんと付いてくれて,
このようになってくれます.先は勝手にdense_input
とかdense_1
とかいう名前を割り振ってくれていましたが,今後の可視性を考えた上での記述になります.