【TF2.0】From_Keras_Tutorial_v2a

将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'))
发布了90 篇原创文章 · 获赞 24 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/menghaocheng/article/details/103549287