Tan*_*ndy 17 python pickle keras
我编写了一个由Layer类扩展的自定义图层类,然后我想挑选历史记录以供进一步分析,但是当我从文件重新加载pickle对象时,python引发了一个错误:
未知图层:注意.
那么,我该如何解决呢?
我都一直get_config,__getstate__并且__setstate__,但是失败了.我只想挑选keras历史,但不是模型,所以请不要告诉我带custom_object参数的保存模型方法.
kei*_*345 10
出现此问题的原因是在转储历史记录时,它无法转储完整模型.因此,在加载它时,它找不到自定义类.
我注意到该keras.callbacks.History对象有一个属性model,并且它的不完整转储是导致此问题的原因.
你说:
我只想腌制keras的历史,而不是模型
以下是一种解决方法:
hist = model.fit(X, Y, ...)
hist.model = None
Run Code Online (Sandbox Code Playgroud)
只需将model属性设置为None,即可成功转储和加载历史对象!
以下是MVCE:
from keras.models import Sequential
from keras.layers import Conv2D, Dense, Flatten, Layer
import keras.backend as K
import numpy as np
import pickle
# MyLayer from https://keras.io/layers/writing-your-own-keras-layers/
class MyLayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.output_dim),
initializer='uniform',
trainable=True)
super(MyLayer, self).build(input_shape) # Be sure to call this at the end
def call(self, x):
return K.dot(x, self.kernel)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3,3), input_shape=(28,28,3), activation='sigmoid'))
model.add(Flatten())
model.add(MyLayer(10))
model.add(Dense(3, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
model.summary()
X = np.random.randn(64, 28, 28, 3)
Y = np.random.randint(0, high=2, size=(64,1))
hist = model.fit(X, Y, batch_size=8)
hist.model = None
with open('hist.pkl', 'wb') as f:
pickle.dump(hist, f)
with open('hist.pkl', 'rb') as f:
hist_reloaded = pickle.load(f)
print(hist.history)
print(hist_reloaded.history)
Run Code Online (Sandbox Code Playgroud)
输出:
{'acc':[0.484375],'亏损':[6.140302091836929]}
{'acc':[0.484375],'亏损':[6.140302091836929]}
PS如果想要使用自定义图层保存keras模型,这应该会有所帮助.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |