numpy와 tensor와의 관계
tensor : 호환성이 낮지만 gpu나 tensorflow 내부의 기능을 극대화 가능함
numpy : 호환성이 좋지만 tensorflow 기능을 극대화 하지 못함. tensorflow 외 pytorch에서도 사용 가능함
# numpy 기반 cifar10 데이터셋
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.cifar10.load_data()
# 방법1
tf.data.Dataset.from_tensors(X_train)
tf.data.Dataset.from_tensors((X_train, y_train))
# 방법2
tf.data.Dataset.from_tensor_slices(X_train)
tf.data.Dataset.from_tensor_slices((X_train, y_train))
방법1 : 데이터셋 전체를 기반으로 데이터를 만들어줌
방법2 : 데이터 1개를 기반으로 만들어 줌 -> ML에 더 적합함
# Tensorflow2 quichstart for expert
train_ds = tf.data.Dataset.from_tensor_slices(
(x_train, y_train)).shuffle(10000).batch(32)
test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)
Cifar10 데이터를 Tenosr data로 변해서 돌리기
중요한 이유 : Data Augmentation이 가능함
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.cifar10.load_data()
input_ = tf.keras.Input((32, 32, 3))
X_train = X_train / 255
X_test = X_test / 255
train = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(32)
y_train = tf.keras.utils.to_categorical(y_train)
x = tf.keras.layers.Conv2D(32, 3)(input_)
x = tf.keras.layers.ReLU()(x)
x = tf.keras.layers.MaxPool2D(2)(x)
x = tf.keras.layers.Conv2D(64, 3)(x)
x = tf.keras.layers.ReLU()(x)
x = tf.keras.layers.Conv2D(64, 3)(x)x = tf.keras.layers.ReLU()(x)
x = tf.keras.layers.Flatten()(x)
x = tf.keras.layers.Dense(1024)(x)
x = tf.keras.layers.Dense(10, activation='softmax')(x)
model = tf.keras.models.Model(input_, x)
model.summary()
model.compile(loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
optimizer='adam',
metrics=['accuracy'])
history = model.fit(train, epochs=10)
pd.DataFrame(history.history).plot.line()