仅用于自己学习使用
import numpy as np
import h5py
from matplotlib import pyplot as plt
import tensorflow as tf
from tensorflow.python.framework import ops
import tf_utils
import time
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
def create_placeholders(n_x,n_y):
X = tf.placeholder(tf.float32, [n_x, None], name="X")
Y = tf.placeholder(tf.float32, [n_y, None], name="Y")
return X, Y
def initialize_parameters_deep(layers_dims):
tf.set_random_seed(1) #指定随机种子
# np.random.seed(3)
parameters = {}
L = len(layers_dims)
for l in range(1,L):
parameters["W" + str(l)] = tf.get_variable("W" + str(l),[layers_dims[l], layers_dims[l - 1]],initializer=tf.contrib.layers.xavier_initializer(seed=1))
parameters["b" + str(l)] = tf.get_variable("b" + str(l),[layers_dims[l], 1],initializer=tf.zeros_initializer())
return parameters
def linear_activation_forward(A_prev,W,b,activation):
Z = tf.matmul(W,A_prev)+b # np.dot(W,A_prev) + b
if activation == "sigmoid":
A= tf.nn.sigmoid(Z)
elif activation == "relu":
A = tf.nn.relu(Z)
# assert(A.shape == (W.shape[0],A_prev.shape[1]))
cache = (A_prev, W, b,Z) # (A_prev, W, b,Z)
return A,cache
def L_model_forward(X,parameters):
caches = [] #[(X, W1, b1,Z1),(A1, W2, b2,Z2).....]
A = X
L = len(parameters) // 2
for l in range(1,L):
A_prev = A
A, cache = linear_activation_forward(A_prev, parameters['W' + str(l)], parameters['b' + str(l)], "relu")
caches.append(cache)
ZL = tf.matmul(parameters['W' + str(L)],A)+parameters['b' + str(L)]
AL, cache = linear_activation_forward(A, parameters['W' + str(L)], parameters['b' + str(L)], "sigmoid")
caches.append(cache)
return ZL
def compute_cost(ZL,Y):
logits = tf.transpose(ZL) #转置
labels = tf.transpose(Y) #转置
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=labels))
return cost
def L_layer_model(X_train, Y_train,X_test,Y_test, layers_dims, learning_rate=0.0001, num_iterations=1500, minibatch_size=32,print_cost=True,is_Plot=True):
ops.reset_default_graph() #能够重新运行模型而不覆盖tf变量
tf.set_random_seed(1)
seed = 3
(n_x , m) = X_train.shape #获取输入节点数量和样本数
n_y = Y_train.shape[0] #获取输出节点数量
costs = [] #成本集
#给X和Y创建placeholder
X,Y = create_placeholders(n_x,n_y)
#初始化参数
parameters =initialize_parameters_deep(layers_dims)
ZL = L_model_forward(X,parameters)
cost = compute_cost(ZL,Y)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(num_iterations):
epoch_cost =0
num_minibatches = int (m / minibatch_size )
seed = seed +1
minibatches = tf_utils.random_mini_batches(X_train,Y_train,minibatch_size,seed)
for minibatch in minibatches:
(minibatch_X,minibatch_Y) = minibatch
_ , minibatch_cost = sess.run([optimizer,cost],feed_dict={X:minibatch_X,Y:minibatch_Y})
epoch_cost = epoch_cost + minibatch_cost / num_minibatches
if epoch % 5 == 0:
costs.append(epoch_cost)
#是否打印:
if print_cost and epoch % 100 == 0:
print("epoch = " + str(epoch) + " epoch_cost = " + str(epoch_cost))
#是否绘制图谱
if is_Plot:
plt.plot(np.squeeze(costs))
plt.ylabel('cost')
plt.xlabel('iterations (per tens)')
plt.title("Learning rate =" + str(learning_rate))
plt.show()
#保存学习后的参数
parameters = sess.run(parameters)
print("参数已经保存到session。")
#计算当前的预测结果
correct_prediction = tf.equal(tf.argmax(ZL),tf.argmax(Y))
#计算准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
print("训练集的准确率:", accuracy.eval({X: X_train, Y: Y_train}))
print("测试集的准确率:", accuracy.eval({X: X_test, Y: Y_test}))
return parameters
import numpy as np
import h5py
from matplotlib import pyplot as plt
import tensorflow as tf
from tensorflow.python.framework import ops
import tf_utils
import time
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
np.random.seed(1)
def create_placeholders(n_x,n_y):
X = tf.placeholder(tf.float32, [n_x, None], name="X")
Y = tf.placeholder(tf.float32, [n_y, None], name="Y")
return X, Y
def initialize_parameters_deep(layers_dims):
tf.set_random_seed(1) #指定随机种子
# np.random.seed(3)
parameters = {}
L = len(layers_dims)
for l in range(1,L):
parameters["W" + str(l)] = tf.get_variable("W" + str(l),[layers_dims[l], layers_dims[l - 1]],initializer=tf.contrib.layers.xavier_initializer(seed=1))
parameters["b" + str(l)] = tf.get_variable("b" + str(l),[layers_dims[l], 1],initializer=tf.zeros_initializer())
return parameters
def linear_activation_forward(A_prev,W,b,activation):
Z = tf.matmul(W,A_prev)+b # np.dot(W,A_prev) + b
if activation == "sigmoid":
A= tf.nn.sigmoid(Z)
elif activation == "relu":
A = tf.nn.relu(Z)
# assert(A.shape == (W.shape[0],A_prev.shape[1]))
cache = (A_prev, W, b,Z) # (A_prev, W, b,Z)
return A,cache
def L_model_forward(X,parameters):
caches = [] #[(X, W1, b1,Z1),(A1, W2, b2,Z2).....]
A = X
L = len(parameters) // 2
for l in range(1,L):
A_prev = A
A, cache = linear_activation_forward(A_prev, parameters['W' + str(l)], parameters['b' + str(l)], "relu")
caches.append(cache)
ZL = tf.matmul(parameters['W' + str(L)],A)+parameters['b' + str(L)]
AL, cache = linear_activation_forward(A, parameters['W' + str(L)], parameters['b' + str(L)], "sigmoid")
caches.append(cache)
return ZL
def compute_cost(ZL,Y):
logits = tf.transpose(ZL) #转置
labels = tf.transpose(Y) #转置
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=labels))
return cost
def L_layer_model(X_train, Y_train,X_test,Y_test, layers_dims, learning_rate=0.0001, num_iterations=1500, minibatch_size=32,print_cost=True,is_Plot=True):
ops.reset_default_graph() #能够重新运行模型而不覆盖tf变量
tf.set_random_seed(1)
seed = 3
(n_x , m) = X_train.shape #获取输入节点数量和样本数
n_y = Y_train.shape[0] #获取输出节点数量
costs = [] #成本集
#给X和Y创建placeholder
X,Y = create_placeholders(n_x,n_y)
#初始化参数
parameters =initialize_parameters_deep(layers_dims)
ZL = L_model_forward(X,parameters)
cost = compute_cost(ZL,Y)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(num_iterations):
epoch_cost =0
num_minibatches = int (m / minibatch_size )
seed = seed +1
minibatches = tf_utils.random_mini_batches(X_train,Y_train,minibatch_size,seed)
for minibatch in minibatches:
(minibatch_X,minibatch_Y) = minibatch
_ , minibatch_cost = sess.run([optimizer,cost],feed_dict={X:minibatch_X,Y:minibatch_Y})
epoch_cost = epoch_cost + minibatch_cost / num_minibatches
if epoch % 5 == 0:
costs.append(epoch_cost)
#是否打印:
if print_cost and epoch % 100 == 0:
print("epoch = " + str(epoch) + " epoch_cost = " + str(epoch_cost))
#是否绘制图谱
if is_Plot:
plt.plot(np.squeeze(costs))
plt.ylabel('cost')
plt.xlabel('iterations (per tens)')
plt.title("Learning rate =" + str(learning_rate))
plt.show()
#保存学习后的参数
parameters = sess.run(parameters)
print("参数已经保存到session。")
#计算当前的预测结果
correct_prediction = tf.equal(tf.argmax(ZL),tf.argmax(Y))
#计算准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
print("训练集的准确率:", accuracy.eval({X: X_train, Y: Y_train}))
print("测试集的准确率:", accuracy.eval({X: X_test, Y: Y_test}))
return parameters
X_train_orig , Y_train_orig , X_test_orig , Y_test_orig , classes = tf_utils.load_dataset()
X_train_flatten = X_train_orig.reshape(X_train_orig.shape[0],-1).T #每一列就是一个样本
X_test_flatten = X_test_orig.reshape(X_test_orig.shape[0],-1).T
#归一化数据
X_train = X_train_flatten / 255
X_test = X_test_flatten / 255
#转换为独热矩阵
Y_train = np.eye(6)[Y_train_orig.reshape(-1)].T
Y_test = np.eye(6)[Y_test_orig.reshape(-1)].T
start_time = time.clock()
layers_dims = [12288, 25, 12, 6] # 5-layer model
parameters = L_layer_model(X_train, Y_train, X_test,Y_test,layers_dims, learning_rate=0.0001,num_iterations = 1500,minibatch_size=32, print_cost = True,is_Plot=True)
end_time = time.clock()
print("CPU的执行时间 = " + str(end_time - start_time) + " 秒" )
参考:https://blog.csdn.net/u013733326/article/details/79971488