import os
from glob import glob
import tensorflow as tf
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
np.random.seed(7777)
tf.random.set_seed(7777)
os.listdir('../../datasets/cifar/train/')
train_img = glob('../../datasets/cifar/train/*.png')
path = train_img[0]
path
raw = tf.io.read_file(path)
img = tf.io.decode_image(raw)
img
img.shape, img.dtype
plt.imshow(img)
plt.show()
def read_image(path):
raw = tf.io.read_file(path)
img = tf.io.decode_image(raw)
return img
dataset = tf.data.Dataset.from_tensor_slices(train_img)
# train 이미지 설정하는 기본 포맷?...
AUTOTUNE = tf.data.experimental.AUTOTUNE
dataset = dataset.map(read_image, num_parallel_calls=AUTOTUNE)
# map : 하나하나당 내가 지정한 함수를 실행한다는 것..
# num_parallel_calls : 몇개의 cpu, gpu를 이용해서 실행할 것인가....
dataset = dataset.batch(32)
# prefetch : tsnsorflow에서 병렬적으로 다음 batch를 읽음..
dataset = dataset.prefetch(AUTOTUNE)
dataset = dataset.shuffle(buffer_size=1)
dataset = dataset.repeat()
next(iter(dataset))
dataset = dataset.batch(32)
# prefetch : tsnsorflow에서 병렬적으로 다음 batch를 읽음..
dataset = dataset.prefetch(AUTOTUNE)
dataset = dataset.shuffle(buffer_size=1)
dataset = dataset.repeat()
next(iter(dataset))
train_img[0].split('/')[-1].split('.')[0].split('_')[-1]
tf.io.read_file('../../datasets/cifar/labels.txt').numpy().decode('ascii').strip().split('\n')
label_names = tf.io.read_file('../../datasets/cifar/labels.txt').numpy().decode('ascii').strip().split('\n')
label_names
label_names.index('deer')
def parse_label(path):
name = path.split('/')[-1].split('.')[0].split('_')[-1]
return np.array(name == np.array(label_names), dtype=np.float32)
parse_label(train_img[0])
train_y = np.array([parse_label(x) for x in train_img])
train_y[0]
def read_image(path):
raw = tf.io.read_file(path)
img = tf.io.decode_image(raw)
return img
def read_data(path, label):
img = read_image(path)
return img, label
dataset = tf.data.Dataset.from_tensor_slices((train_img, train_y)) # tensorflow 데이터 형태여야 함...
# train 이미지 설정하는 기본 포맷?...
AUTOTUNE = tf.data.experimental.AUTOTUNE
dataset = dataset.map(read_data, num_parallel_calls=AUTOTUNE)
# map : 하나하나당 내가 지정한 함수를 실행한다는 것..
# num_parallel_calls : 몇개의 cpu, gpu를 이용해서 실행할 것인가....
dataset = dataset.batch(32)
# prefetch : tsnsorflow에서 병렬적으로 다음 batch를 읽음..
dataset = dataset.prefetch(AUTOTUNE)
dataset = dataset.shuffle(buffer_size=1)
dataset = dataset.repeat()
next(iter(dataset))
os.listdir('../../datasets/cifar/train/')
train_img = glob('../../datasets/cifar/train/*.png')
path = train_img[0]
path
f_name = tf.strings.split(path, '_')[-1]
label_name = tf.strings.regex_replace(f_name, '.png', '')
label_name
tf.cast(label_name == label_names, tf.float32)
def get_label(path):
f_name = tf.strings.split(path, '_')[-1]
lbl_name = tf.strings.regex_replace(f_name, '.png', '')
onehot = tf.cast(lbl_name == label_names, tf.float32)
return onehot
def load_image_label(path):
gfile = tf.io.read_file(path)
image = tf.io.decode_image(gfile)
label = get_label(path)
return image, label
dataset = tf.data.Dataset.from_tensor_slices((train_img))
# train 이미지 설정하는 기본 포맷?...
AUTOTUNE = tf.data.experimental.AUTOTUNE
dataset = dataset.map(load_image_label, num_parallel_calls=AUTOTUNE)
# map : 하나하나당 내가 지정한 함수를 실행한다는 것..
# num_parallel_calls : 몇개의 cpu, gpu를 이용해서 실행할 것인가....
dataset = dataset.batch(32)
# prefetch : tsnsorflow에서 병렬적으로 다음 batch를 읽음..
dataset = dataset.prefetch(AUTOTUNE)
dataset = dataset.shuffle(buffer_size=1)
dataset = dataset.repeat()
next(iter(dataset))
from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, Flatten, Dense, Add
def build_resnet(input_shape):
inputs = Input(input_shape)
net = Conv2D(32, kernel_size=3, strides=2,
padding='same', activation='relu')(inputs)
net = MaxPool2D()(net)
net1 = Conv2D(64, kernel_size=1, padding='same', activation='relu')(net)
net2 = Conv2D(64, kernel_size=3, padding='same', activation='relu')(net1)
net3 = Conv2D(64, kernel_size=1, padding='same', activation='relu')(net2)
net1_1 = Conv2D(64, kernel_size=1, padding='same')(net)
net = Add()([net1_1, net3])
net1 = Conv2D(64, kernel_size=1, padding='same', activation='relu')(net)
net2 = Conv2D(64, kernel_size=3, padding='same', activation='relu')(net1)
net3 = Conv2D(64, kernel_size=1, padding='same', activation='relu')(net2)
net = Add()([net, net3])
net = MaxPool2D()(net)
net = Flatten()(net)
net = Dense(10, activation="softmax")(net)
model = tf.keras.Model(inputs=inputs, outputs=net, name='resnet')
return model
model = build_resnet((32, 32, 3))
model.summary()
learning_rate = 0.03
opt = tf.keras.optimizers.Adam(learning_rate)
loss = tf.keras.losses.categorical_crossentropy
model.compile(optimizer=opt, loss=loss, metrics=["accuracy"])
len(train_img) / 32
model.fit(dataset, epochs = 1, steps_per_epoch=len(train_img) / 32)
어렵다...
💻 출처 : 제로베이스 데이터 취업 스쿨