您好,登錄后才能下訂單哦!
這篇文章主要介紹導出python中模型參數的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
模型的保存和讀取
1.tensorflow保存和讀取模型:tf.train.Saver() .save()
#保存模型需要用到save函數 save( sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix='meta', write_meta_graph=True, write_state=True ) ''' sess: 保存模型要求必須有一個加載了計算圖的會話,而且所有變量必須已被初始化。 save_path: 模型保存路徑及保存名稱 global_step: 如果提供的話,這個數字會添加到save_path后面,用于區分不同訓練階段的結果 '''
示例:
#例子 import tensorflow as tf import numpy as np import os #用numpy產生數據 x_data = np.linspace(-1,1,300)[:, np.newaxis] #轉置 noise = np.random.normal(0,0.05, x_data.shape) y_data = np.square(x_data)-0.5+noise #輸入層 x_ph = tf.placeholder(tf.float32, [None, 1]) y_ph = tf.placeholder(tf.float32, [None, 1]) #隱藏層 w1 = tf.Variable(tf.random_normal([1,10])) b1 = tf.Variable(tf.zeros([1,10])+0.1) wx_plus_b1 = tf.matmul(x_ph, w1) + b1 hidden = tf.nn.relu(wx_plus_b1) #輸出層 w2 = tf.Variable(tf.random_normal([10,1])) b2 = tf.Variable(tf.zeros([1,1])+0.1) wx_plus_b2 = tf.matmul(hidden, w2) + b2 y = wx_plus_b2 #損失 loss = tf.reduce_mean(tf.reduce_sum(tf.square(y_ph-y),reduction_indices=[1])) train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #保存模型對象saver saver = tf.train.Saver() #判斷模型保存路徑是否存在,不存在就創建 if not os.path.exists('tmp/'): os.mkdir('tmp/') #初始化 with tf.Session() as sess: if os.path.exists('tmp/checkpoint'): #判斷模型是否存在 saver.restore(sess, 'tmp/model.ckpt') #存在就從模型中恢復變量 else: init = tf.global_variables_initializer() #不存在就初始化變量 sess.run(init) for i in range(1000): _,loss_value = sess.run([train_op,loss], feed_dict={x_ph:x_data, y_ph:y_data}) if(i%50==0): save_path = saver.save(sess, 'tmp/model.ckpt') print("迭代次數:%d , 訓練損失:%s"%(i, loss_value))
每調用一次保存操作會創建后3個數據文件并創建一個檢查點(checkpoint)文件,簡單理解就是權重等參數被保存到 .chkp.data 文件中,以字典的形式;圖和元數據被保存到 .chkp.meta 文件中,可以被 tf.train.import_meta_graph 加載到當前默認的圖。
2.keras保存和讀取模型
model.save(filepath),同時保存model和權重的
import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.models import Sequential from keras.layers import Dense from keras.optimizers import SGD # 載入數據 (x_train,y_train),(x_test,y_test) = mnist.load_data() # (60000,28,28) print('x_shape:',x_train.shape) # (60000) print('y_shape:',y_train.shape) # (60000,28,28)->(60000,784) x_train = x_train.reshape(x_train.shape[0],-1)/255.0 x_test = x_test.reshape(x_test.shape[0],-1)/255.0 # 換one hot格式 y_train = np_utils.to_categorical(y_train,num_classes=10) y_test = np_utils.to_categorical(y_test,num_classes=10) # 創建模型,輸入784個神經元,輸出10個神經元 model = Sequential([ Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax') ]) # 定義優化器 sgd = SGD(lr=0.2) # 定義優化器,loss function,訓練過程中計算準確率 model.compile( optimizer = sgd, loss = 'mse', metrics=['accuracy'], ) # 訓練模型 model.fit(x_train,y_train,batch_size=64,epochs=5) # 評估模型 loss,accuracy = model.evaluate(x_test,y_test) print('\ntest loss',loss) print('accuracy',accuracy) # 保存模型 model.save('model.h6')
以上是導出python中模型參數的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。