keras java 模型导出_keras 模型参数,模型保存,中间结果输出操作

本文展示了如何使用Keras进行模型构建、训练,并导出模型参数、保存模型以及输出中间结果。通过实例,详细解释了模型保存、加载权重、获取中间层输出的方法,有助于理解Keras模型的操作流程。
摘要由CSDN通过智能技术生成

我就废话不多说了,大家还是直接看代码吧~

"""

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", "config": {"bias_regularizer": None, "use_bias": True, "kernel_regularizer": None, "bias_initializer": {"class_name": "Zeros", "config": {}}, "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, "trainable": True, "units": 10, "activation": "softmax", "name": "dense_2"}}]

# model.fit(x_train, y_train, epochs=1, batch_size=128, callbacks=[checkpoint],validation_data=(x_valid, y_valid))

model.fit(x_train, y_train, epochs=1,validation_data=(x_valid, 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, 580, 3))

# x = Conv2D(64, (3, 3), activation="relu", padding="same", name="block1_conv1")(img_input)

# x = Conv2D(64, (3, 3), activation="relu", padding="same", name="block1_conv2")(x)

# x = MaxPooling2D((2, 2), strides=(2, 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过之后的图像:

原始图像:

289f0ee9f0759ffc3c267c6cfe8d21ec.png

经过一层conv以后,输出其中4张图片:

ccd911fad8a6a1c86a9e03ed7bd842ee.png

e921b8942f3abcb7f469f0beca747703.png

1b48f9fdadf1324797b0a74c81e7cac0.png

9feb9d1b94cf534054b6acc505914370.png

以上这篇keras 模型参数,模型保存,中间结果输出操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/u011311291/article/details/79963831

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值