将Coursera 上吴恩达的教程《Convolutional Neural Networks》第2周的练习1代码转成TF2.0
import tensorflow as tf
from matplotlib.pyplot import imshow
from tensorflow.keras.utils import plot_model
#from kt_utils import *
from tensorflow.keras.preprocessing import image
import h5py
def load_dataset():
train_dataset = h5py.File('datasets/train_happy.h5', "r")
train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels
test_dataset = h5py.File('datasets/test_happy.h5', "r")
test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels
classes = np.array(test_dataset["list_classes"][:]) # the list of classes
train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes
X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()
# Normalize image vectors
X_train = X_train_orig/255.
X_test = X_test_orig/255.
# Reshape
Y_train = Y_train_orig.T
Y_test = Y_test_orig.T
print ("number of training examples = " + str(X_train.shape[0]))
print ("number of test examples = " + str(X_test.shape[0]))
print ("X_train shape: " + str(X_train.shape))
print ("Y_train shape: " + str(Y_train.shape))
print ("X_test shape: " + str(X_test.shape))
print ("Y_test shape: " + str(Y_test.shape))
def HappyModel(input_shape):
X_input = tf.keras.layers.Input(input_shape)
X = tf.keras.layers.ZeroPadding2D((3, 3))(X_input)
X = tf.keras.layers.Conv2D(32, (7, 7), strides = (1, 1), name = 'conv0')(X)
X = tf.keras.layers.BatchNormalization(axis = 3, name = 'bn0')(X)
X = tf.keras.layers.Activation('relu')(X)
X = tf.keras.layers.MaxPooling2D((2, 2), name='max_pool0')(X)
X = tf.keras.layers.Conv2D(32, (7, 7), strides = (1, 1), name = 'conv1')(X)
X = tf.keras.layers.BatchNormalization(axis = 3, name = 'bn1')(X)
X = tf.keras.layers.Activation('relu')(X)
X = tf.keras.layers.MaxPooling2D((2, 2), name='max_pool1')(X)
X = tf.keras.layers.Flatten()(X)
X = tf.keras.layers.Dense(1, activation='sigmoid', name='fc')(X)
model = tf.keras.Model(inputs = X_input, outputs = X, name='HappyModel')
return model
happyModel = HappyModel(X_train.shape[1:])
happyModel.summary()
happyModel.compile(loss='binary_crossentropy',
optimizer = "adam",
metrics=['acc'])
happyModel.fit(X_train,Y_train,epochs=20)
preds = happyModel.evaluate(X_test, Y_test)
print()
print ("Loss = " + str(preds[0]))
print ("Test Accuracy = " + str(preds[1]))
img_path = 'images/my_image1.jpg'
img = image.load_img(img_path, target_size=(64, 64))
imshow(img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = tf.keras.applications.imagenet_utils.preprocess_input(x)
print(happyModel.predict(x))
plot_model(happyModel, to_file='HappyModel.png')
#SVG(model_to_dot(happyModel).create(prog='dot', format='svg'))