|
- import random
- import os
- import cv2
- import os,math
- import numpy as np
- import shutil
- import tensorflow as tf
- from PIL import Image
- from keras import backend as K
- import keras.backend as KTF
- import xlsxwriter
- from keras.models import load_model
- from keras.utils import to_categorical
- from collections import defaultdict
- import xlsxwriter
- from keras.models import Model
- import matplotlib.pyplot as plt
- # from deepgauge_cov import *
- # from deepcoverage import *
- os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
- os.environ["CUDA_VISIBLE_DEVICES"] = "1"
-
- def load_data(path='mnist.npz'):
- """Loads the MNIST dataset.
-
- # Arguments
- path: path where to cache the dataset locally
- (relative to ~/.keras/datasets).
-
- # Returns
- Tuple of Numpy arrays: `(x_train, y_train), (x_test, y_test)`.
- """
-
- f = np.load(path)
- x_train, y_train = f['x_train'], f['y_train']
- x_test, y_test = f['x_test'], f['y_test']
- f.close()
- return (x_train, y_train), (x_test, y_test)
-
-
- def init_coverage_tables(model1):
- model_layer_dict1 = defaultdict(bool)
- init_dict(model1, model_layer_dict1)
- return model_layer_dict1
-
- def init_dict(model, model_layer_dict):
- for layer in model.layers:
- if 'flatten' in layer.name or 'input' in layer.name:
- continue
- for index in range(layer.output_shape[-1]):
- model_layer_dict[(layer.name, index)] = False
-
-
- def neuron_to_cover(model_layer_dict):
- not_covered = [(layer_name, index) for (layer_name, index), v in model_layer_dict.items() if not v]
- if not_covered:
- layer_name, index = random.choice(not_covered)
- else:
- layer_name, index = random.choice(model_layer_dict.keys())
- return layer_name, index
-
-
- def neuron_covered(model_layer_dict):
- covered_neurons = len([v for v in model_layer_dict.values() if v])
- total_neurons = len(model_layer_dict)
- return covered_neurons, total_neurons, covered_neurons / float(total_neurons)
-
-
- def scale(intermediate_layer_output, rmax=1, rmin=0):
- X_std = (intermediate_layer_output - intermediate_layer_output.min()) / (
- intermediate_layer_output.max() - intermediate_layer_output.min())
- X_scaled = X_std * (rmax - rmin) + rmin
- return X_scaled
-
-
- def update_coverage(input_data, model, model_layer_dict, threshold=0):
- layer_names = [layer.name for layer in model.layers if
- 'flatten' not in layer.name and 'input' not in layer.name]
-
- intermediate_layer_model = Model(inputs=model.input,
- outputs=[model.get_layer(layer_name).output for layer_name in layer_names])
- intermediate_layer_outputs = intermediate_layer_model.predict(input_data)
-
- for i, intermediate_layer_output in enumerate(intermediate_layer_outputs):
- scaled = scale(intermediate_layer_output[0])
- for num_neuron in range(scaled.shape[-1]):
- if np.mean(scaled[..., num_neuron]) > threshold and not model_layer_dict[(layer_names[i], num_neuron)]:
- model_layer_dict[(layer_names[i], num_neuron)] = True
-
-
- def coverage(input_data, model):
- get_value = []
- layer_names = [layer.name for layer in model.layers if
- 'flatten' not in layer.name and 'input' not in layer.name]
-
- intermediate_layer_model = Model(inputs=model.input,
- outputs=[model.get_layer(layer_name).output for layer_name in layer_names])
- intermediate_layer_outputs = intermediate_layer_model.predict(input_data)
-
- for i, intermediate_layer_output in enumerate(intermediate_layer_outputs):
- scaled = scale(intermediate_layer_output[0])
- for num_neuron in range(scaled.shape[-1]):
- get_value.append(np.mean(scaled[..., num_neuron]))
- # if np.mean(scaled[..., num_neuron]) > threshold and not model_layer_dict[(layer_names[i], num_neuron)]:
- # model_layer_dict[(layer_names[i], num_neuron)] = True
- return get_value
-
- #%%
- path = '/data0/BigPlatform/ZJPlatform/007_DeepTesting/000-Dataset/datasets/mnist.npz'
- (x_train, y_train), (x_test, y_test) = load_data(path)
- y_train = to_categorical(y_train, num_classes=10)
- y_test = to_categorical(y_test, num_classes=10)
- x_train = np.expand_dims(x_train, axis=3)
- x_test = np.expand_dims(x_test, axis=3)
- x_train = x_train/255.0
- x_test = x_test/255.0
- model = load_model('/data0/BigPlatform/ZJPlatform/007_DeepTesting/001-Demo/AlexNet_MNIST.h5')
-
- #%%
- num = 1000
- model_layer_dict1 = init_coverage_tables(model)
- get_value = [[] for j in range(num)]
- for i in range(num):
- image = x_train[i:i+1]
- print(i)
- get_value[i] = coverage(image, model)
- #%%
- np.save('/data0/BigPlatform/ZJPlatform/007_DeepTesting/001-Demo/AlexNet_MNIST_Train_Bounds.npy', np.array(get_value))
|