from tensorflow.keras import utils
train_label = utils.to_categorical(train_label) # 0 or 1 -> one-hot vector
test_label = utils.to_categorical(test_label) # 0 or 1 -> one-hot vector
print(train_label.shape) # 모양을 영어로?
print(test_label.shape) # 모양을 영어로?
# from sklearn import preprocessing
# enc = preprocessing.OneHotEncoder(categories='auto') # Apply 'One-hot encoding' on labels (Single integer to One-hot vector)
# train_label = enc.fit_transform(train_label).toarray()
# test_label = enc.fit_transform(test_label).toarray()
4. Build & Train the model
import tensorflow as tf
# tf.keras 에 필요한 함수들이 모여있습니다.
from tensorflow.keras import datasets, utils
from tensorflow.keras import models, layers, activations, initializers, losses, optimizers, metrics
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # https://stackoverflow.com/questions/35911252/disable-tensorflow-debugging-information
model = models.Sequential() # Build up the "Sequence" of layers (Linear stack of layers)
# Dense-layer (with he-initialization)
model.add(layers.Dense(input_dim=8, units=256, activation=None, kernel_initializer=initializers.he_uniform())) # he-uniform initialization
# model.add(layers.BatchNormalization()) # Use this line as if needed
model.add(layers.Activation('elu')) # elu or relu (or layers.ELU / layers.LeakyReLU)
model.add(layers.Dense(units=512, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dense(units=512, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dense(units=256, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dropout(rate=0.5)) # Dropout-layer
model.add(layers.Dense(units=2, activation='softmax')) # Apply softmax function on model's output
# "Compile" the model description (Configures the model for training)
model.compile(optimizer=optimizers.Adam(), # Please try the Adam-optimizer
loss=losses.categorical_crossentropy,
metrics=[metrics.categorical_accuracy]) # Precision / Recall / F1-Score 적용하기 @ https://j.mp/3cf3lbi
# "Fit" the model on training data
history = model.fit(train_data, train_label, batch_size=100, epochs=20, validation_split=0.3)
model.predict(test_data)
# "Evaluate" the model on test data
result = model.evaluate(test_data, test_label)
print('loss (cross-entropy) :', result[0])
print('test accuracy :', result[1])
history.history.keys()
acc = history.history['categorical_accuracy']
val_acc = history.history['val_categorical_accuracy']
x_len = np.arange(len(acc))
plt.plot(x_len, acc, marker='.', c='blue', label="Train-set Acc.")
plt.plot(x_len, val_acc, marker='.', c='red', label="Validation-set Acc.")
plt.legend(loc='lower right')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('Accuracy')
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, preprocessing # Scikit-learn (sklearn)
datasets.load_boston().keys()
df = pd.DataFrame(datasets.load_boston().data) # make a pandas DataFrame from numpy array
df.head() # 머리를 영어로?
x_data = datasets.load_boston().data
y_data = datasets.load_boston().target # 집의 가격 (in $1,000s)
2. Devide dataframe into X & Y -> Train X / Test X / Train Y / Test Y
from sklearn import model_selection
train_data, test_data, train_label, test_label = model_selection.train_test_split(x_data, y_data,
test_size=0.3,
random_state=0)
print(train_data.shape)
print(test_data.shape)
print(train_label.shape)
print(test_label.shape)
sc = preprocessing.StandardScaler() # Apply standard scaling on x_data (Standardization)
# x_data = sc.fit_transform(x_data)
sc.fit(train_data) # pickle 파일로 저장한 후, 새로운 데이터가 들어오면 적용하기
train_data = sc.transform(train_data)
test_data = sc.transform(test_data)
# print(x_data.shape) # 모양을 영어로?
# print(y_data.shape) # 모양을 영어로?
pd.DataFrame(train_data)
3. Build & Train the model
import tensorflow as tf
# tf.keras 에 필요한 함수들이 모여있습니다.
from tensorflow.keras import datasets, utils
from tensorflow.keras import models, layers, activations, initializers, losses, optimizers, metrics
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # https://stackoverflow.com/questions/35911252/disable-tensorflow-debugging-information
model = models.Sequential() # Build up the "Sequence" of layers (Linear stack of layers)
# Dense-layer (with he-initialization)
model.add(layers.Dense(input_dim=13, units=64, activation=None, kernel_initializer=initializers.he_uniform())) # he-uniform initialization
# model.add(layers.BatchNormalization()) # Use this line as if needed
model.add(layers.Activation('elu')) # elu or relu (or layers.ELU / layers.LeakyReLU)
model.add(layers.Dense(units=64, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dense(units=32, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dropout(rate=0.4)) # Dropout-layer
model.add(layers.Dense(units=1, activation=None))
# "Compile" the model description (Configures the model for training)
model.compile(optimizer=optimizers.Adam(), # Please try the Adam-optimizer
loss=losses.mean_squared_error, # MSE
metrics=[metrics.mean_squared_error]) # MSE
model.summary()
# "Fit" the model on training data
history = model.fit(train_data, train_label, batch_size=100, epochs=1000, validation_split=0.3, verbose=0)
# "Evaluate" the model on test data
result = model.evaluate(test_data, test_label)
print('loss (mean_squared_error) :', result[0])
history.history.keys()
loss = history.history['mean_squared_error']
val_loss = history.history['val_mean_squared_error']
x_len = np.arange(len(loss))
plt.plot(x_len, loss, marker='.', c='blue', label="Train-set loss.")
plt.plot(x_len, val_loss, marker='.', c='red', label="Validation-set loss.")
plt.legend(loc='upper right')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('Loss(MSE)')
plt.show()
200번대 부터 더욱 자세히 그래프 그리기 / 800번대 정도에서 overfitting으로 보임
# "Predict" on test data
model.predict(test_data)
sample_data = np.array([[0.02731, 0.0, 7.07, 0.0, 0.469, 6.421, 78.9, 4.9671, 2.0, 242.0, 17.8, 396.90, 9.14]])
sample_data = sc.transform(sample_data) # "transform" the sample data with fitted scaler (no "fit", just "transform")
model.predict(sample_data)
model.summary()
# Theta 세타 값 확인
model.get_layer(name='dense_2').weights[0].numpy().shape
# bias 값 확인
model.get_layer(name='dense_2').weights[1].numpy().shape
model.get_layer(name='dense_2').weights[1].numpy()