TensorFlowで学習中、Accuracyの値が変化せず損失が表示されない

Python

1!pip install git+https://github.com/tensorflow/examples.git 2 3import os 4from google.colab import drive 5drive.mount('/content/drive')6 7 8import tensorflow as tf 9import tensorflow_datasets as tfds 10from tensorflow_examples.models.pix2pix import pix2pix 11from IPython.display import clear_output 12import matplotlib.pyplot as plt 13 14import numpy as np 15import matplotlib.pyplot as plt 16 17from tensorflow.python import keras 18from tensorflow.python.keras import backend as K 19from tensorflow.python.keras.models import Model, Sequential 20from tensorflow.python.keras.layers import Conv2D, Dense, Input, MaxPooling2D, UpSampling2D, Lambda 21from tensorflow.keras.preprocessing.image import load_img, img_to_array, array_to_img, ImageDataGenerator 22 23import glob 24import os 25import math 26 27train_path = '/content/drive/MyDrive/Colab Notebooks/normal/train/image'28trainmask_path = '/content/drive/MyDrive/Colab Notebooks/normal/train/mask'29test_path = '/content/drive/MyDrive/Colab Notebooks/normal/val/image'30testmask_path = '/content/drive/MyDrive/Colab Notebooks/normal/val/mask'31 32train_lists = sorted(glob.glob(os.path.join(train_path, '*.png')))33trainmask_lists = sorted(glob.glob(os.path.join(trainmask_path, '*.png')))34test_lists = sorted(glob.glob(os.path.join(test_path, '*.png')))35testmask_lists = sorted(glob.glob(os.path.join(testmask_path, '*.png')))36 37test_n_sample = math.floor(len(test_lists))38train_n_sample = len(train_lists)39 40print(len(train_lists))41print(len(trainmask_lists))42print(len(test_lists))43print(len(testmask_lists))44 45print(train_lists)46print(trainmask_lists)47print(test_lists)48print(testmask_lists)49 50 51import cv2 52 53img_size = 25654import torch 55import torchvision 56from IPython.display import display_png 57from PIL import Image, ImageOps 58 59def get_index_from_data_list(data_list):60 x_rgb = []61 for f in data_list:62 rgbp=np.zeros((img_size,img_size,1))63 image=Image.open(f)64 imager=image.resize((img_size,img_size))65 rgb=np.asarray(imager)66 67 for tate in range (0,img_size,1):68 for yoko in range (0,img_size,1):69 70 rgbp[tate,yoko,0]=071 if rgb[tate,yoko,0]>0:72 rgbp[tate,yoko,0]=rgb[tate,yoko,0]73 74 x_rgb.append(rgbp)75 return np.stack(x_rgb)76 77def get_index_from_data_list2(data_list):78 x_rgb = []79 for f in data_list:80 rgbp=np.zeros((img_size,img_size,1))81 image=Image.open(f)82 imager=image.resize((img_size,img_size))83 rgb=np.asarray(imager)84 85 for tate in range (0,img_size,1):86 for yoko in range (0,img_size,1):87 88 if rgb[tate,yoko,0]<60 and rgb[tate,yoko,1]<60:89 rgbp[tate,yoko,0]=090 if rgb[tate,yoko,0]>60 and rgb[tate,yoko,1]<60:91 rgbp[tate,yoko,0]=192 if rgb[tate,yoko,0]<60 and rgb[tate,yoko,1]>60:93 rgbp[tate,yoko,0]=194 if rgb[tate,yoko,0]>60 and rgb[tate,yoko,1]>60:95 rgbp[tate,yoko,0]=196 97 x_rgb.append(rgbp)98 return np.stack(x_rgb)99 100def get_rgb_from_data_list(data_list):101 x_rgb = []102 for f in data_list:103 rgb = img_to_array(104 load_img(105 f,106 target_size=(img_size, img_size)107 )108 ).astype(np.uint8)109 x_rgb.append(rgb)110 return np.stack(x_rgb)111 112 113test_imgarray = get_rgb_from_data_list(test_lists)114print(test_imgarray.shape)115train_imgarray = get_rgb_from_data_list(train_lists)116print(train_imgarray.shape)117 118testmask_imgarray = get_index_from_data_list(testmask_lists)119print(testmask_imgarray.shape)120trainmask_imgarray = get_index_from_data_list(trainmask_lists)121print(trainmask_imgarray.shape)122 123 124display_png(array_to_img(train_imgarray[200]))125display_png(array_to_img(trainmask_imgarray[200]))126display_png(array_to_img(test_imgarray[20]))127display_png(array_to_img(testmask_imgarray[20]))128 129print(trainmask_imgarray[150])130print(train_imgarray[150])131 132 133VALIDATAION_SPILIT=0.2134TRAIN_LENGTH =len(train_lists)*VALIDATAION_SPILIT 135BATCH_SIZE = 64136BUFFER_SIZE = 20000137#STEPS_PER_EPOCH = TRAIN_LENGTH // BATCH_SIZE138STEPS_PER_EPOCH=10139print(STEPS_PER_EPOCH)140 141 142def display(display_list):143 plt.figure(figsize=(15, 15))144 145 title = ['Input Image', 'True Mask', 'Predicted Mask']146 147 for i in range(len(display_list)):148 plt.subplot(1, len(display_list), i+1)149 plt.title(title[i])150 plt.imshow(tf.keras.utils.array_to_img(display_list[i]))151 plt.axis('off')152 plt.show()153 154 155sample_image, sample_mask = test_imgarray[0], testmask_imgarray[0]156 157 158base_model = tf.keras.applications.MobileNetV2(input_shape=[img_size, img_size, 3], include_top=False)159 160# Use the activations of these layers161layer_names = [162 'block_1_expand_relu', # 64x64163 'block_3_expand_relu', # 32x32164 'block_6_expand_relu', # 16x16165 'block_13_expand_relu', # 8x8166 'block_16_project', # 4x4167]168base_model_outputs = [base_model.get_layer(name).output for name in layer_names]169 170# Create the feature extraction model171down_stack = tf.keras.Model(inputs=base_model.input, outputs=base_model_outputs)172 173down_stack.trainable = False174 175 176up_stack = [177 pix2pix.upsample(img_size, 3), # 4x4 -> 8x8178 pix2pix.upsample(256, 3), # 8x8 -> 16x16179 pix2pix.upsample(128, 3), # 16x16 -> 32x32180 pix2pix.upsample(64, 3), # 32x32 -> 64x64181]182 183 184def unet_model(output_channels:int):185 inputs = tf.keras.layers.Input(shape=[img_size, img_size, 3])186 187 # Downsampling through the model188 skips = down_stack(inputs)189 x = skips[-1]190 skips = reversed(skips[:-1])191 192 # Upsampling and establishing the skip connections193 for up, skip in zip(up_stack, skips):194 x = up(x)195 concat = tf.keras.layers.Concatenate()196 x = concat([x, skip])197 198 # This is the last layer of the model199 last = tf.keras.layers.Conv2DTranspose(200 filters=output_channels, kernel_size=3, strides=2,201 padding='same') #64x64 -> 128x128202 203 x = last(x)204 205 return tf.keras.Model(inputs=inputs, outputs=x)206 207 208OUTPUT_CLASSES = 2209 210model = unet_model(output_channels=OUTPUT_CLASSES)211model.compile(optimizer='adam',212 loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),213 metrics=['accuracy'])214 215 216tf.keras.utils.plot_model(model, show_shapes=True)217 218 219def create_mask(pred_mask):220 pred_mask = tf.argmax(pred_mask, axis=-1)221 pred_mask = pred_mask[..., tf.newaxis]222 return pred_mask[0]223 224 225def show_predictions(dataset=None, num=1):226 if dataset:227 for image, mask in dataset.take(num):228 pred_mask = model.predict(image)229 display([test_imgarray[0], testmask_imgarray[0], create_mask(pred_mask)])230 else:231 display([sample_image, sample_mask,232 create_mask(model.predict(test_imgarray))])233 234 235class DisplayCallback(tf.keras.callbacks.Callback):236 def on_epoch_end(self, epoch, logs=None):237 clear_output(wait=True)238 show_predictions()239 print ('\nSample Prediction after epoch {}\n'.format(epoch+1))240 241 242EPOCHS = 500243VAL_SUBSPLITS = 1244VALIDATION_STEPS = train_n_sample//BATCH_SIZE//VAL_SUBSPLITS 245model_history = model.fit(x=train_imgarray,y=trainmask_imgarray, batch_size=BATCH_SIZE,epochs=EPOCHS,246 steps_per_epoch=STEPS_PER_EPOCH,247 validation_split=VALIDATAION_SPILIT)

コメントを投稿

0 コメント