Lec-07 application and tips
Learning rate
:Gradient,チルト
:学習率と傾斜の関連関係により,学習に適したモデル値を見つけることができる.
:hyper-parameter(モデルを作成するための設定値)=モデルを作成するために最適化する方法
:どの程度の傾斜と移動距離で最適な位置を得ることができます.
Tensorflow Code
def grad(hypothesis, labels): # 가설, 실제 답
with tf.GradientTape() as tape:
loss_value = loss_fn(hypothesis, labels) # loss_value = Cost
return tape.gradient(loss_value, [W,b]) # 가설 값과 실제 값의 차이를
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
optimizer.apply_gradients(grads_and_vars=zip(grads, [W,b])) # learning_rate와 gradient값을 통해 우리가 원하는 모델의 최적의 값을 찾을 수 있음.
3 e-4:0.0003 Adamの最適学習率.
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
learning rate decay:良い学習率値が得られても、学習過程で学習率値を適切に調整することが重要です
:学習の過程でコスト値が徐々に下がり始め、下がる過程で、ある瞬間学習できないことがある.
:このとき学習率値を調節することで学習率を低下させるのが学習率減衰法である.
異なる減衰方法
1.Stepフォールオフ:N epochor validation loss->各スタッフの幅に合わせて学習速度を調整する
2. Exponential decay
3. 1/t decay
Tensorflow Code
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step, 1000, 0.96, staircase) # (시작 값, 전체 스탭, 몇 번째 스탭마다, 얼마만큼 learning rate값을 조절할건지)
Data preprocessing
:データ前処理方法
Standardization = (data - np.mean(data) / sqrt(np.sum((data - np.mean(data))^2) / np.count(data))
Normarlization = (data - np.min(data, 0)) / (np.max(data, 0) - np.min(data, 0))
:標準化と標準化により、不要なデータを同じ表面に均一に表示します.前処理例:不要なデータの排除(Noisy Data)
1. Numeric
2. NLP
3. Face Image
Overfitting
:コーディネートが行き過ぎます.
:モデルが仮定に合致するにつれて、実際のモデルを作成する過程で評価を行い、評価が進むにつれてモデルが徐々に上昇し、モデルの精度はある程度になります.
:この場合、実際のモデルを作成する過程で、私たちが使用しているデータのみを使用して評価するため、データに基づいてモデルをよりよく作成することができますが、実際にはモデルを作成する過程で、新しいデータを作成することができます.すなわち,モデル学習に用いられていない新しいデータで学習すると,学習が深まるにつれてテスト中の精度が低下する.
:理想的なモデルを作成する上で、最も重要なのはテストデータと評価データが最も正確であることを確保することです.
High bias(underfit)
:学習不足
High variance(overfit)
:データのみに基づいてモデルを作成します.
:変化が大きい
Set a feature->オーバーフィットの問題の解決方法
:Get more training data(追加データの追加方法)
:Smaller set of features(featureの使用が少ない):各属性の意味を明確にするために次元を縮小する(PCA)
:追加プロパティ(追加プロパティ):モデルを最適化します.
sklearn Code
from sklearn.decomposition import PCA
pca = decomposition.PCA(n_components=3)
pca.fit(X)
X = pca.transform(X)
ルール(Add term to loss:特定の値を追加することで指定)λ--: fixes high bias (Under fitting)
λ++: fixes high variance (overfitting)
:ウェイト自体を学習すると同時に、正規化プロセスによってコスト値を徐々に繰り返し、termをloss値に調整して、オーバーフィットを避ける
Tensorflow Code
L2_loss = tf.nn.12_loss(w) #output = sum(t ** 2) / 2
Ovefitting Solutions:Feature Normalization(フィーチャーを正規化)
:Regularization(特定の値と損失値を拡大することによってモデルの特定の重みをよりよく規範化する方法)
:データの移動(データの強化:データの追加)
: Batch Normalization
Tensorflow Code
import tensorflow.contrib.eager as tfe
tf.enable_eager_execution()
Code(Eager)
Data Preprocess
xy = np.array([[828.659973, 833.450012, 908100, 828.349976, 831.659973],
[823.02002, 828.070007, 1828100, 821.655029, 828.070007],
[819.929993, 824.400024, 1438100, 818.97998, 824.159973],
[816, 820.958984, 1008100, 815.48999, 819.23999],
[819.359985, 823, 1188100, 818.469971, 818.669983],
[819, 823, 1198100, 816, 820.450012],
[811.700012, 815.25, 1098100, 809.780029, 813.669983],
[809.51001, 816.659973, 1398100, 804.539978, 809.559998]])
x.train = xy[:, 0:-1]
y_train = xy[:, [-1]]
def normalization(data): # 0~1 데이터 정규화
numerator = data - np.min(data, 0)
dominator = np.max(data, 0) - np.min(data, 0)
return numerator / denominator
xy = normalization(xy)
L2 Normdataset = tf.data.Dataset.from_tensor_slices((x_train, y_train).batch(len(x_train))
W = tf.Variable(tf.random_normal([4, 1]), dtype=tf.float32)
b = tf.Variable(tf.random_normal([1]), dtype=tf.float32)
def linearReg_fn(features): #Linear Regression에 맞는 hypothesis 구하기
hypothesis = tf.matmul(feature, W) + b
return hypothesis
def l2_loss(loss, beta = 0.01):
W_reg = tf.nn.12_loss(W) # output = sum(t ** 2) / 2
loss = tf.reduce_mean(loss + W_reg * beta)
return loss # 정규화된 l2_loss 값을 구함.
def loss_fn(hypothesis, labels, flag = False): #Linear Regression에 대한 cost function
cost = tf.reduce_mean(tf.square(hypothesis - labels))
# 실제 가설과 y값의 차이를 최소화하는 구간을 cost function을 통해서 구함.
# flag를 통해서 l2_loss를 적용할건지 말건지를 판단
if(flag):
cost = 12_loss(cost)
return cost
Learning Decayis_decay = True
starter_learning_rate = 0.1
if(is_decay):
global_step = tf.Variable(0, trainable=False)
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step, 50, 0.96, staircase=True)
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
else:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=starter_learning_rate)
def grad(features, labels, 12_flag):
with tf.GradientTape() as tape:
loss_value = loss_fn(linearReg_fn(features),labels, 12_flag)
return tape.gradient(loss_value, [W,b]), loss_value
for step in range(EPOCHS):
for features, labels in tfe.Iterator(dataset):
features = tf.cast(features, tf.float32)
labels = tf.cast(labels, tf.float32)
grads, loss_Value = grad(linearReg_fn(features), features, labels, False)
optimizer.apply_gradients(grads_and_vars=zip(grads,[W,b]), global_step=global_step)
if step % 10 == 0:
print("Iter: {}, Loss: {:.4f}, Learning Rate: {:.8f}".format(step, loss_value, optimizer._learning_rate()))
Summary: Learning rate
Data sets
Training and Validation
:学習に使用するデータと評価に使用するデータを整理することが最も重要です.
Good Case
:モデルのパフォーマンスの向上が必要
:HyperParameterとNetwork Structureで99%のモデルを作成し、同じデータのテストを繰り返します.
Tensorflow Code
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() #60,000 training / 10,000 testing images
model.fit(x_train, y_train, validation_split=0.2, epochs=5) # 20% Val data
:layerを作成し、学習率を決定し、オプティマイザを宣言した後、ある程度モデルをよりよく生成できます.Evaluating a hypothesis
:ある程度モデリングを選択した後、新しいデータを直接作成してモデルをテストできます.
:ex)同じ人の異なる角度/表情を見て、よく区別します.
:testデータ自体は学習中に検証される評価データを構成していますが、実際のモデルを新しいデータで検証するプロセスは非常に重要です.
Tensorflow Code
test_acc = accuracy_fn(softmax_fn(x_test), y_test) # define hypothesis and test
model.evaluate(x_test, y_test) # Keras
:学習データと評価データによるモデルの作成Anomaly検出(異常検出)
:ヘルスデータを使用したモデルの作成
:新しい、特殊なデータがある場合、モデルのデータが理想的であれば、Anomalyが検出される
Learning
Online vs Batch
:オンライン学習:インターネット接続から学習へのデータの変化
:オフラインラーニング-データが静的である場合にモデルを作成する
Fine Tuning/Feature Extraction
1. Original Model
:白人を区別するモデルを作るとき、白人モデルが入ってくると、よく区別されます.
:既存のモードでは、黄人や黒人が入ってくると区別がつかない.
2. Fine-tunning
:既存の顔を区別するモデルでは、黄色人と黒人のデータを入力するときによく区別できるように、既存の重み値を調整します.
3. Feature Extraction
:新しいタスクのみを学習します.
Efficient Models
:有効なモデルを作成することが重要です
:推理時間を最大限に短縮することが重要
:推理に大きな影響を及ぼすモデルの重み値を簡略化することが重要
:全接続レイヤのパラメータ値が大きいため、通常は1 x 1ボリュームを使用して代わります.
:ネットを押して、Mobilenetの論文がたくさん出てきました.
Tensorflow Code
tf.nn.depthwise_conv2d(input, filter, strides, padding)
Sample Data
Fashion MNIST-Image Classification
#Tensorflow Code
fashion_mnist = keras.datasets.fashion_mnist # keras-> fashion_mnist library 제공
(train_iamges, train labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Cost', 'Sandal', 'shirt', 'Sneaker', 'Bag', 'Ankle boot'] # 0~9까지 vector 변환
train_images = train_images / 255.0 # (60000, 28, 28) # 0~1까지로 정규화
test_images = test_images / 255.0 # (10000, 28, 28) # 0~1까지로 정규화
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28) # 학습을 위한 모델을 펴줌
keras.layers.Dense(128, activation=tf.nn.relu), # 128개의 layer 선언
keras.layers.Dense(10, activation=tf.nn.softmax) # 10개의 클래스로 구분하는 모델 생성
])
model.compile(optimize='adam',
loss='sparse_categorical_crossentropy',
mertircs=['accuracy'])
model.fit(train_images, train_labels, epochs=5) # 5번 모델 훈련
test_loss, test_acc = model.evaluate(test_images, test_labels)
predictions = model.predict(test_images)
np.argmax(predictions[0]) # 9 label
IMDB-Text Classification: IMDB(Internet Movie Data Base)
:実際に映画を見たとき、映画に対する評価をよりよく分離するために、モデルを作ることができます.
# Tensorflow Code
imdb = keras.datasets.imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) # 10000개의 단어로 구성
word_index = imdb.get_word_index()
# The first indices are reserved
# 자연어 처리를 위한 전처리 과정
word_index = {k:(v+3) for k,v in word_index.item()}
word_index = ["<PAD>"] = 0 # 공백에 대한 값 vector로 선언
word_index = ["<START>"] = 1 # 시작 값
word_index = ["<UNK>"] = 2 # unknown # 모르는 값
word_index = ["<UNUSED>"] = 3 # 사용되지 않은 값
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
train_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"], padding="post", maxlen=256)
model = keras.Sequential()
model.add(keras.layers.Embedding(vocab_size, 16))
model.add(keras.layers.GlobalAveragePooling10())
model.add(keras.layers.Dense(16, activation=tf.nn.relu))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy", metrics=['accuracy'])
model.fit(partial_x_train, partial_y_train, epochs=40, validation_data=(x_val, y_val))
CIFAR-100from keras.datasets import cifar100
(x_train, y_train), (x_test, y_test) = cifar100.load_data(label_mode='fine')
# 100개의 클래스에 대해서 직접 test 가능
Summary: Data sets
すべての人のために準備された第2四半期-TensorFlow
すべての人のために準備された第2四半期-TensorFlow
すべての人のために準備された第2四半期-TensorFlow
すべての人のために準備された第2四半期-TensorFlow
Reference
この問題について(Lec-07 application and tips), 我々は、より多くの情報をここで見つけました https://velog.io/@lybin10/Lec-07-application-and-tipsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol