« cgpのRocky Linux8 でtensorflow | メイン | tensorflow GPU複数使い »

2022年10月15日

tensorflow 3つの方法

Sequential APIによるモデルの構築
Functional APIによるモデル構築
Subclassing API(Model Subclassing)によるモデル構築


◆Sequential APIによるモデルの構築 Sequentialというのは「線形の」 → 縦にならんだ・層を積み重ねただけのモデルだけ作れる


import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

model.compile(optimizer='adam',
loss=loss_fn,
metrics=['accuracy'])


model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test, verbose=2)

--------------
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32,32,3)))
といった書き方も可能


◆Functional APIによるモデル構築
# Functional APIでモデルを定義します。
inputs = tf.keras.layers.Input(shape=(28, 28), name='inputs')
flatten = tf.keras.layers.Flatten(name='flatten')(inputs)
hidden1 = tf.keras.layers.Dense(128, activation='relu', name='relu1')(flatten)
hidden2 = tf.keras.layers.Dense(128, activation='relu', name='relu2')(hidden1)
concat = tf.keras.layers.Concatenate(name='concat')([hidden1, hidden2])
outputs = tf.keras.layers.Dense(10, activation='softmax', name='softmax')(concat)

# 入出力を定義します。
model = tf.keras.models.Model(inputs=inputs, outputs=outputs, name='functional')

#ここから先はSequential APIと同じ
model.compile(optimizer="sgd", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(x = x_train, y = y_train, epochs=50, batch_size=128)
model.evaluate(x = x_test, y = y_test, verbose=2)




◆Subclassing APIはいつも使ってるので、省略

投稿者 muuming : 2022年10月15日 05:54

コメント

コメントしてください




保存しますか?