keras 模型引數,模型儲存,中間結果輸出操作
阿新 • • 發佈:2020-07-07
我就廢話不多說了,大家還是直接看程式碼吧~
''' Created on 2018-4-16 ''' import keras from keras.models import Sequential from keras.layers import Dense from keras.models import Model from keras.callbacks import ModelCheckpoint,Callback import numpy as np import tflearn import tflearn.datasets.mnist as mnist x_train,y_train,x_test,y_test = mnist.load_data(one_hot=True) x_valid = x_test[:5000] y_valid = y_test[:5000] x_test = x_test[5000:] y_test = y_test[5000:] print(x_valid.shape) print(x_test.shape) model = Sequential() model.add(Dense(units=64,activation='relu',input_dim=784)) model.add(Dense(units=10,activation='softmax')) model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy']) filepath = 'D:\\machineTest\\model-ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5' # filepath = 'D:\\machineTest\\model-ep{epoch:03d}-loss{loss:.3f}.h5' checkpoint = ModelCheckpoint(filepath,monitor='val_loss',verbose=1,save_best_only=True,mode='min') print(model.get_config()) # [{'class_name': 'Dense','config': {'bias_regularizer': None,'use_bias': True,'kernel_regularizer': None,'batch_input_shape': (None,784),'trainable': True,'kernel_constraint': None,'bias_constraint': None,'kernel_initializer': {'class_name': 'VarianceScaling','config': {'scale': 1.0,'distribution': 'uniform','mode': 'fan_avg','seed': None}},'activity_regularizer': None,'units': 64,'dtype': 'float32','bias_initializer': {'class_name': 'Zeros','config': {}},'activation': 'relu','name': 'dense_1'}},{'class_name': 'Dense','units': 10,'activation': 'softmax','name': 'dense_2'}}] # model.fit(x_train,epochs=1,batch_size=128,callbacks=[checkpoint],validation_data=(x_valid,y_valid)) model.fit(x_train,y_valid),steps_per_epoch=10,validation_steps=1) # score = model.evaluate(x_test,y_test,batch_size=128) # print(score) # #獲取模型結構狀況 # model.summary() # _________________________________________________________________ # Layer (type) Output Shape Param # # ================================================================= # dense_1 (Dense) (None,64) 50240(784*64+64(b)) # _________________________________________________________________ # dense_2 (Dense) (None,10) 650(64*10 + 10 ) # ================================================================= # #根據下標和名稱返回層物件 # layer = model.get_layer(index = 0) # 獲取模型權重,設定權重model.set_weights() weights = np.array(model.get_weights()) print(weights.shape) # (4,)權重由4部分組成 print(weights[0].shape) # (784,64)dense_1 w1 print(weights[1].shape) # (64,)dense_1 b1 print(weights[2].shape) # (64,10)dense_2 w2 print(weights[3].shape) # (10,)dense_2 b2 # # 儲存權重和載入權重 # model.save_weights("D:\\xxx\\weights.h5") # model.load_weights("D:\\xxx\\weights.h5",by_name=False)#by_name=True,可以根據名字匹配和層載入權重 # 檢視中間結果,必須要先宣告個函式式模型 dense1_layer_model = Model(inputs=model.input,outputs=model.get_layer('dense_1').output) out = dense1_layer_model.predict(x_test) print(out.shape) # (5000,64) # 如果是函式式模型,則可以直接輸出 # import keras # from keras.models import Model # from keras.callbacks import ModelCheckpoint,Callback # import numpy as np # from keras.layers import Input,Conv2D,MaxPooling2D # import cv2 # # image = cv2.imread("D:\\machineTest\\falali.jpg") # print(image.shape) # cv2.imshow("1",image) # # # 第一層conv # image = image.reshape([-1,386,580,3]) # img_input = Input(shape=(386,3)) # x = Conv2D(64,(3,3),padding='same',name='block1_conv1')(img_input) # x = Conv2D(64,name='block1_conv2')(x) # x = MaxPooling2D((2,2),strides=(2,name='block1_pool')(x) # model = Model(inputs=img_input,outputs=x) # out = model.predict(image) # print(out.shape) # out = out.reshape(193,290,64) # image_conv1 = out[:,:,1].reshape(193,290) # image_conv2 = out[:,20].reshape(193,290) # image_conv3 = out[:,40].reshape(193,290) # image_conv4 = out[:,60].reshape(193,290) # cv2.imshow("conv1",image_conv1) # cv2.imshow("conv2",image_conv2) # cv2.imshow("conv3",image_conv3) # cv2.imshow("conv4",image_conv4) # cv2.waitKey(0)
中間結果輸出可以檢視conv過之後的影象:
原始影象:
經過一層conv以後,輸出其中4張圖片:
以上這篇keras 模型引數,中間結果輸出操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。