tf.keras は tensorflow2 によって導入された高度にカプセル化されたフレームワークであり、ニューラル ネットワーク モデルをすばやく構築するために使用できます. Keras は迅速な実験をサポートするために生まれ、アイデアを結果にすばやく変換できます. これは究極の使いやすいディープ ラーニング フレームワークです. 一貫性のある簡潔な API を提供することで、一般的なアプリケーションの作業負荷を大幅に軽減し、コードのカプセル化と再利用性を向上させることができます。
Keras の公式ドキュメント:
https://tensorflow.google.cn/api_docs/python/tf
ニューラル ネットワークを構築する 6 つの方法
tf.keras はニューラル ネットワークの 6 つの方法を構築します
import
train, test
model = tf.keras.models.Sequential / class MyModel(Model) モデル=MyModel
model.compile
model.fit
model.summary
最初のステップ: import tensorflow as tf などの関連モジュールをインポートします。
ステップ 2 : 入力ネットワークのトレーニング セットとテスト セットを指定します。たとえば、トレーニング セットの入力 x_train とラベル y_train を指定し、テスト セットの入力 x_test とラベル y_test を指定します。
ステップ 3 : 層ごとにネットワーク構造を構築します、モデル = tf.keras.models.Sequential()。
または、 4 番目のステップを継承する方法を使用します: model.compile() でトレーニング メソッドを構成し、トレーニング中に使用されるオプティマイザー、損失関数、および最終評価インデックスを選択します。
ステップ 5 : model.fit() でトレーニング プロセスを実行し、トレーニング セットとテスト セットの入力値とラベル、各バッチのサイズ (batchsize)、データ セットの反復回数 (エポック) を通知します。 )。
ステップ 6 : model.summary() を使用してネットワーク構造を出力し、パラメーターの数を数えます。
関数の使い方の紹介
tf.keras.models.Sequential()
Sequential 関数は、ニューラル ネットワークのネットワーク構造を記述するコンテナーであり、Sequential 関数の入力パラメーターには、入力層から出力層までのネットワーク構造が記述されます。
好き:
レイヤーをまっすぐにする: tf.keras.layers.Flatten()
- 直線化レイヤーは、テンソルのサイズを変換し、入力フィーチャを 1 次元配列に直線化できます。これは、計算パラメーターのないレイヤーです。
全結合層:
tf.keras.layers.Dense( 神经元个数, activation=”激活函数”, kernel_regularizer=”正则化方式”)
の:
- アクティベーション (指定された文字列) オプションの relu、softmax、sigmoid、tanh など。
- kernel_regularizer オプション tf.keras.regularizers.l1()、tf.keras.regularizers.l2()
畳み込み層:
tf.keras.layers.Conv2D( filter = 卷积核个数, kernel_size = 卷积核尺寸, strides = 卷积步长, padding = “valid” or “same”)
LSTM 層:
tf.keras.layers.LSTM()
次のように一般的に使用されます。
model = tf.keras.models.Sequential([
# tf.keras.layers.Dense(神经元个数, activation='激活函数', kernel_regularizer=正则化方式)
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2)
])
model.compile
model.compile( optimizer = 优化器, loss = 损失函数, metrics = [“准确率”])
Compile は、ニューラル ネットワークのトレーニング方法を構成し、トレーニング中に使用されるオプティマイザー、損失関数、および精度評価基準を通知するために使用されます。
その中で:
- optimizer は、文字列の形式で指定されたオプティマイザの名前にするか、関数の形式にすることができ、関数形式を使用して学習率、運動量、およびハイパーパラメータを設定できます。
オプションは次のとおりです。
‘Sgd’or tf.keras.optimizers.SGD( lr=学习率,
decay=学习率衰减率,
momentum=动量参数)
‘Adagrad’or tf.keras.optimizers.Adagrad(lr=学习率,
decay=学习率衰减率)
‘Adadelta’or tf.keras.optimizers.Adadelta(lr=学习率,
decay=学习率衰减率)
‘Adam’or tf.keras.optimizers.Adam (lr=学习率,
decay=学习率衰减率)
- loss は、文字列または関数として与えられる損失関数の名前です。
オプションは次のとおりです。
‘mse’or tf.keras.losses.MeanSquaredError()
‘sparse_categorical_crossentropy or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
# 损失函数常需要经过 softmax 等函数将输出转化为概率分布的形式。
# from_logits 则用来标注该损失函数是否需要转换为概率的形式,取 False 时表示已经转化为概率分布,取 True 时表示没有转化为概率分布,直接输出。
- メトリックは、ネットワーク評価指標をマークします。
オプションは次のとおりです。
‘accuracy’:y_和 y 都是数值,如 y_=[1] y=[1]。
‘categorical_accuracy’:y_和 y 都是以独热码和概率分布表示。
如 y_=[0, 1, 0], y=[0.256, 0.695, 0.048]
‘sparse_categorical_accuracy’:y_是以数值形式给出,y 是以独热码形式给出。
如 y_=[1],y=[0.256, 0.695, 0.048]。
model.fit: トレーニング プロセスの実行に使用
model.fit(训练集的输入特征, 训练集的标签, batch_size, epochs,
validation_data = (测试集的输入特征,测试集的标签),
validataion_split = 从测试集划分多少比例给训练集,
validation_freq = 测试的 epoch 间隔次数)
モデル.概要()
要約機能は、ネットワーク構造とパラメータ統計を出力するために使用されます
例
- 例として sklearn の虹彩データ セットを取り上げ、Sequential 関数を使用して初期化し、精度認識に 6 段階の方法を使用します。
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
import numpy as np
from sklearn import datasets
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
model = tf.keras.models.Sequential([
# tf.keras.layers.Dense( 神经元个数, activation='激活函数', kernel_regularizer=正则化方式 )
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])
# Model.compile( optimizer = 优化器, loss = 损失函数, metrics = ['准确率'])
model.compile(
# optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy']
)
# model.fit(训练集的输入特征, 训练集的标签, batch_size, epochs,
# validation_data = (测试集的输入特征,测试集的标签),
# validataion_split = 从测试集划分多少比例给训练集,
# validation_freq = 测试的 epoch 间隔次数)
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
model.summary()
- 例としてsklearnのアイリスデータセットを取り上げ、クラス関数を使用して初期化し、精度認識に6段階の方法を使用します
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
from sklearn import datasets
import numpy as np
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__()
self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
def call(self, x, training=None, mask=None):
# def call(self, x):
y = self.d1(x)
return y
model = IrisModel()
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
model.summary()