Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

TensorFlow

import sys, platform

print(sys.version)
print(platform.platform())

1공통 패키지

import numpy as np
import pandas as pd
import matplotlib
import sklearn

print(f'NumPy {np.__version__}')
print(f'pandas {pd.__version__}')
print(f'matplotlib {matplotlib.__version__}')
print(f'Scikit-Learn {sklearn.__version__}')
import tensorflow as tf
import keras

print(f'TensorFlow {tf.__version__}')
print(f'Keras {keras.__version__}')

assert tf.config.list_physical_devices('GPU'), 'No GPU available'

2CIFAR-10

(train_images, train_labels), (test_images, test_labels) = keras.datasets.cifar10.load_data()
from sklearn.model_selection import train_test_split

# train/validation split
train_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.2, random_state=0)
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
val_dataset = tf.data.Dataset.from_tensor_slices((val_images, val_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_images, test_labels))

train_dataset = train_dataset.shuffle(1000).batch(64).prefetch(4)
val_dataset = val_dataset.batch(64)
test_dataset = test_dataset.batch(32)

3ConvNet

import keras
from keras import layers

keras.backend.clear_session()
model = keras.Sequential([
    keras.Input(shape=(32, 32, 3)),
    keras.layers.Rescaling(1./255),
    layers.Conv2D(6, (5, 5), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(16, (5, 5), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(120, activation='relu'),
    layers.Dense(84, activation='relu'),
    layers.Dense(10)
])

model.summary()

model.compile(
    optimizer='adam', 
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), 
    metrics=['accuracy'])

checkpoint_filepath = 'convnet-cifar10.keras'
history = model.fit(
    train_dataset, epochs=2, validation_data=val_dataset,
    callbacks=[
        keras.callbacks.ModelCheckpoint(checkpoint_filepath, save_best_only=True),
        keras.callbacks.TensorBoard(log_dir='logs')])

model = keras.models.load_model(checkpoint_filepath)
test_loss, test_acc = model.evaluate(test_dataset, verbose=0)
print(f'[Test] Loss: {test_loss:.4f}, Accuracy: {test_acc:.4f}')
import pandas as pd
import matplotlib.pyplot as plt

history_table = pd.DataFrame(history.history)
print(history_table)

ax1 = plt.subplot(1, 2, 1)
history_table[['loss', 'val_loss']].plot(ax=ax1)
ax2 = plt.subplot(1, 2, 2)
history_table[['accuracy', 'val_accuracy']].plot(ax=ax2)

4CIFAR-100

(train_images, train_labels), (test_images, test_labels) = keras.datasets.cifar100.load_data()
from sklearn.model_selection import train_test_split

# train/validation split
train_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.2, random_state=0)
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
val_dataset = tf.data.Dataset.from_tensor_slices((val_images, val_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_images, test_labels))

train_dataset = train_dataset.shuffle(1000).batch(64).prefetch(4)
val_dataset = val_dataset.batch(64)
test_dataset = test_dataset.batch(32)

5ResNet

input_shape = train_images.shape[1:]  # (32, 32, 3)
num_classes = len(np.unique(train_labels))

keras.backend.clear_session()
model = keras.applications.ResNet50(
    include_top=True,
    weights=None,
    input_shape=input_shape,
    classes=num_classes,)

model.summary()

loss_fn = keras.losses.SparseCategoricalCrossentropy(from_logits=False)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])

checkpoint_filepath = 'resnet-cifar100.keras'
history = model.fit(
    train_dataset, epochs=2, validation_data=val_dataset,
    callbacks=[
        keras.callbacks.ModelCheckpoint(checkpoint_filepath, save_best_only=True),
        keras.callbacks.TensorBoard(log_dir='logs')])

model = keras.models.load_model(checkpoint_filepath)
test_loss, test_acc = model.evaluate(test_dataset, verbose=0)
print(f'[Test] Loss: {test_loss:.4f}, Accuracy: {test_acc:.4f}')
import pandas as pd
import matplotlib.pyplot as plt

history_table = pd.DataFrame(history.history)
print(history_table)

ax1 = plt.subplot(1, 2, 1)
history_table[['loss', 'val_loss']].plot(ax=ax1)
ax2 = plt.subplot(1, 2, 2)
history_table[['accuracy', 'val_accuracy']].plot(ax=ax2)