美文网首页
Class1 Assignment4 tensorflow 版

Class1 Assignment4 tensorflow 版

作者: 寒露lu | 来源:发表于2019-08-05 17:28 被阅读0次
import tensorflow as tf
import h5py
import numpy as np

INPUT_NODE = 12288
OUTPUT_NODE = 1
LAYER_DIMS = [12288, 20, 7, 5, 1]
# 初始化参数
def initialize_parameters(layer_dims):
    tf.set_random_seed(1)
    parameters = {}
    L = len(layer_dims)
    for l in range(1, L):
        parameters['W' + str(l)] = tf.Variable(tf.random_normal([layer_dims[l-1], layer_dims[l]], stddev=1), name='w'+str(l))
        parameters['b' + str(l)] = tf.Variable(tf.zeros([layer_dims[l]]), name='b' + str(l))
    return parameters
# 前向传播过程
def inference(input_tensor, parameters):
    A = input_tensor
    L = len(parameters) // 2

    for l in range(1, L):
        A_prev = A
        A = tf.nn.tanh(tf.matmul(A_prev, parameters['W'+str(l)]) + parameters['b' + str(l)])
    AL = tf.nn.sigmoid(tf.matmul(A, parameters['W'+str(L)]) + parameters['b' + str(L)])
    return AL

def train(X, Y, learning_rate=0.0075, num_iterations=2500, print_cost= False):
    x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')
    y_ = tf.placeholder(tf.float32, [None, OUTPUT_NODE], name='y-input')
    parameters = initialize_parameters(LAYER_DIMS)

    y = inference(x, parameters)
    loss = - tf.reduce_mean(
        tf.log(tf.clip_by_value(y, 1e-10, 1.0)) * y_ + tf.log(tf.clip_by_value((1 - y), 1e-10, 1.0)) * (1 - y_))
    train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
    acc = evaluate(Y, y)
    saver = tf.train.Saver()
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        for i in range(num_iterations):
            sess.run(train_step, feed_dict={x: X, y_:Y})
            if i % 100 == 0:
                total_loss = sess.run(loss, feed_dict={x:X, y_:Y})
                train_acc = sess.run(acc, feed_dict={x:X, y_:Y})
                print('Cost after interation %i: %f, train accuracy is %f' % (i, total_loss, train_acc))
        saver.save(sess, './model/model.ckpt')
def predict(X, Y):
    x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')
    y_ = tf.placeholder(tf.float32, [None, OUTPUT_NODE], name='y-input')
    parameters = initialize_parameters(LAYER_DIMS)
    y = inference(x, parameters)
    test_acc = evaluate(Y, y)
    saver = tf.train.Saver()
    with tf.Session() as sess:
        saver.restore(sess, './model/model.ckpt')
        print('test accuracy is %f' %(sess.run(test_acc, feed_dict={x: X, y_: Y})))
def evaluate(Y, y):
    ones = tf.ones_like(y)
    zeros = tf.zeros_like(y)
    predictions = tf.where(y < 0.5, x=zeros, y=ones)
    labels = tf.cast(Y, tf.float32)
    acc = tf.reduce_mean(tf.cast(tf.equal(labels, predictions), tf.float32))
    return acc
def load_data():
    train_dataset = h5py.File('datasets/train_catvnoncat.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_catvnoncat.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
if __name__ == '__main__':
    train_x_orig, train_y, test_x_orig, test_y, classes = load_data()
    train_x_flatten = train_x_orig.reshape(train_x_orig.shape[0], -1)
    test_x_flatten = test_x_orig.reshape(test_x_orig.shape[0], -1)

    # Standardize data to have feature values between 0 and 1.
    train_x = train_x_flatten / 255.
    test_x = test_x_flatten / 255.

    print("train_x's shape: " + str(train_x.shape))
    print("test_x's shape: " + str(test_x.shape))
    train(train_x, train_y.T)

按照这个网络结构,loss下降不明显,改成两层的反而下降明显

相关文章

网友评论

      本文标题:Class1 Assignment4 tensorflow 版

      本文链接:https://www.haomeiwen.com/subject/yrtvdctx.html