Sequential モデルの構築
Dense レイヤーを積み重ね、活性化関数を適用し、損失関数とオプティマイザーを設定してコンパイルします。
「Sequential モデルの構築」はCoddyKit上の無料R Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。
Sequentialモデル
Sequentialモデルは、各レイヤーが入力テンソルを1つ、出力テンソルを1つだけ持つ、レイヤーの線形スタックです。Kerasで最も単純なモデルの種類であり、フィードフォワード分類器、回帰モデル、基本的なCNNやRNNなど、実用上の大半の用途に対応します。
library(keras)
# An empty sequential model
model <- keras_model_sequential()
print(model)
# Or specify the input shape upfront
model <- keras_model_sequential(input_shape = c(20))
print(model)layer_dense() — 全結合層
layer_dense(units, activation)は、すべての入力ニューロンがすべての出力ニューロンに接続する全結合(dense)層を追加します。units引数は出力の次元数を設定します。activationは非線形性を適用します。'relu'は隠れ層で標準的に使用されます。
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(units = 128, activation = 'relu') |>
layer_dense(units = 64, activation = 'relu') |>
layer_dense(units = 1, activation = 'sigmoid')
# Print architecture
summary(model)出力層の活性化関数
最終層の活性化関数はタスクによって異なります。
'sigmoid':二値分類(0~1の確率を出力)'softmax':多クラス分類(合計が1になる確率を出力)'linear'または活性化関数なし:回帰(実数値の予測を出力)
# Binary classification
binary_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'sigmoid') # P(class=1)
# Multi-class (10 classes)
multi_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(10, activation = 'softmax') # P per class
# Regression
reg_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'linear') # raw valuecompile() — 損失関数、オプティマイザー、指標
compile(loss, optimizer, metrics)は学習処理を設定します。一般的な組み合わせは次のとおりです。
- 二値分類:
loss = 'binary_crossentropy'、metrics = 'accuracy' - 多クラス分類:
loss = 'categorical_crossentropy' - 回帰:
loss = 'mse'、metrics = 'mae'
model |> compile(
loss = 'binary_crossentropy',
optimizer = optimizer_adam(learning_rate = 0.001),
metrics = c('accuracy')
)
# Check configuration
model$loss
model$optimizer$get_config()optimizer_adam()
Adam(Adaptive Moment Estimation)は、ほとんどのディープラーニングタスクでデフォルトとして使われるオプティマイザーです。勾配の1次モーメントと2次モーメントの推定値を使い、パラメータごとに学習率を調整します。デフォルトの学習率0.001は、多くの問題でよい出発点になります。
# Adam with default settings
model |> compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
# Customised Adam
model |> compile(
optimizer = optimizer_adam(
learning_rate = 0.0005,
beta_1 = 0.9,
beta_2 = 0.999,
epsilon = 1e-7
),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)fit() — モデルの学習
fit(model, x, y, epochs, batch_size, validation_split)はモデルを学習させます。各エポックは、学習データ全体を1回処理することを意味します。バッチサイズは、各重み更新の前に処理するサンプル数を決定します。この関数は履歴オブジェクトを返します。
# Prepare example data
x_train <- matrix(rnorm(1000 * 20), nrow = 1000)
y_train <- sample(c(0, 1), 1000, replace = TRUE)
history <- model |> fit(
x = x_train,
y = y_train,
epochs = 20,
batch_size = 32,
validation_split = 0.2, # reserve 20% for validation
verbose = 1
)
plot(history)レイヤーの正則化 — Dropout
layer_dropout(rate)は、学習中に入力ユニットのうち割合rate分をランダムに0に設定します。これによりニューロン同士の過度な相互適応を防ぎ、強力な正則化として機能します。Dropoutは学習中だけ有効で、推論中は無効です。
model <- keras_model_sequential(input_shape = c(784)) |>
layer_dense(512, activation = 'relu') |>
layer_dropout(rate = 0.4) |>
layer_dense(256, activation = 'relu') |>
layer_dropout(rate = 0.3) |>
layer_dense(10, activation = 'softmax')
summary(model)L1およびL2重み正則化
kernel_regularizerを使うと、個々のレイヤーに正則化を適用して大きな重みにペナルティを課せます。L2(リッジ)は重みの二乗和にペナルティを課し、L1(ラッソ)は絶対値にペナルティを課してスパース性を生み出します。どちらもregularizer_l2()とregularizer_l1()で利用できます。
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(
units = 64,
activation = 'relu',
kernel_regularizer = regularizer_l2(l = 0.01)
) |>
layer_dense(
units = 32,
activation = 'relu',
kernel_regularizer = regularizer_l1_l2(l1 = 1e-4, l2 = 1e-3)
) |>
layer_dense(1, activation = 'sigmoid')
summary(model)バッチ正規化
layer_batch_normalization()は、各ミニバッチについて、前のレイヤーの活性化を正規化します。これにより学習が安定し、より高い学習率を使用できるようになり、軽度の正則化としても機能します。layer_dense()の後かつ活性化関数の前に配置する方法、または活性化関数の後に配置する方法があり、どちらも実際に使われています。
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(256, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(128, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(1, activation = 'sigmoid')
summary(model)evaluate() と predict()
evaluate(model, x_test, y_test)はテストデータに対する損失と指標を計算します。predict(model, x_new)は生の予測値(分類の場合は確率)を生成します。どちらも数値行列を受け取り、一貫したRネイティブの値を返します。
x_test <- matrix(rnorm(200 * 20), nrow = 200)
y_test <- sample(c(0, 1), 200, replace = TRUE)
# Evaluate on test set
test_metrics <- model |> evaluate(x_test, y_test, verbose = 0)
cat('Test Loss:', test_metrics['loss'])
cat('Test Accuracy:', test_metrics['accuracy'])
# Generate predictions
prob_preds <- model |> predict(x_test)
class_preds <- ifelse(prob_preds > 0.5, 1, 0)
table(class_preds, y_test)モデルの保存と読み込み
コンパイルして学習済みのモデルは、save_model_tf(model, 'path')(TF SavedModel形式、推奨)またはsave_model_hdf5(model, 'model.h5')で保存できます。load_model_tf()またはload_model_hdf5()で再読み込みします。読み込んだモデルにはコンパイル設定が保持されているため、すぐに予測したり、学習を続けたりできます。
# Save in TensorFlow SavedModel format (recommended)
save_model_tf(model, '/tmp/my_dense_model')
# Reload
loaded <- load_model_tf('/tmp/my_dense_model')
# Confirm predictions match
new_preds <- loaded |> predict(x_test)
all.equal(prob_preds, new_preds) # TRUEクイックチェック
5クラス分類問題のsequentialモデルを構築する場合、出力層ではどの活性化関数を使用し、ユニット数はいくつにすべきでしょうか。
Sequentialモデルのまとめ
Sequentialモデルの構築における重要なポイント:
keras_model_sequential()は、層を直線的に積み重ねたモデルを作成します。layer_dense(units, activation)は、基本となる全結合層です。- 出力層の活性化関数:
'sigmoid'(二値分類)、'softmax'(多クラス分類)、'linear'(回帰)。 compile(loss, optimizer, metrics)は、学習プロセスを設定します。fit(model, x, y, epochs, batch_size, validation_split)は、モデルを学習させます。- 正則化:
layer_dropout(rate)、regularizer_l2()、layer_batch_normalization()。 save_model_tf()で保存し、load_model_tf()で読み込みます。
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(128, activation = 'relu') |>
layer_dropout(0.4) |>
layer_dense(64, activation = 'relu') |>
layer_dropout(0.3) |>
layer_dense(1, activation = 'sigmoid')
model |> compile(
optimizer = optimizer_adam(0.001),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
history <- model |> fit(
x_train, y_train,
epochs = 30, batch_size = 64,
validation_split = 0.2, verbose = 0
)
plot(history)よくある質問
「Sequential モデルの構築」レッスンは無料ですか?
はい。「Sequential モデルの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。
「Sequential モデルの構築」で何を学びますか?
Dense レイヤーを積み重ね、活性化関数を適用し、損失関数とオプティマイザーを設定してコンパイルします。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
R Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Sequential モデルの構築」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このR Academyレッスンでコードを書いて実行できますか?
はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- R で Keras と TensorFlow をセットアップする
- Sequential モデルの構築
- 畳み込みニューラルネットワークの基礎
- 学習、検証、過学習の防止