tensorflow - 保存 Keras 模型错误:AttributeError: 'numpy.dtype' object has no attribute 'item'
问题描述
我试图将我的 Keras 模型保存在出现错误的 pycharm 中,这就是我创建模型的方式:
main_input = Input(shape=(X_train.shape[1],), dtype=X_train.dtype,
name='main_input')
xx = Embedding(output_dim=512, input_dim=3000, input_length=len(X))
(main_input)
xx= SpatialDropout1D(0.4)(xx)
lstm_out = LSTM(64)(xx)
#lstm_out = Dense(3,activation='softmax')(lstm_out)
from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model
auxiliary_input = Input(shape=(Z_train.shape[1],), name='aux_input')
auxB= Input(shape=(hasB_train.shape[1],), name='aux_B')
auxM = Input(shape=(hasM_train.shape[1],), name='aux_M')
auxBM_input = keras.layers.concatenate([ auxB, auxM])
auxiliary_output = Dense(3, activation='softmax', name='aux_output') (lstm_out)
auxBM_output = Dense(3, activation='softmax', name='auxBM_output') (auxBM_input)
x = keras.layers.concatenate([lstm_out, auxiliary_input, auxBM_input])
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
main_output = Dense(3, activation='sigmoid', name='main_output')(x)
model = Model(inputs=[main_input, auxiliary_input, auxB, auxM], outputs= [main_output, auxiliary_output, auxBM_output])
model.compile(optimizer='rmsprop', loss='categorical_crossentropy' ,metrics = ['accuracy'], loss_weights=[4, 1, 10])
model.summary()
当我运行此代码时model.save('model.h5')
,我收到以下错误:
回溯(最后一次调用):文件“C:/.../ENV/newDataset/combined3.py”,第 209 行,在 model.save('blah.h5') 文件“C:\ProgramData\Anaconda2\envs \Building_Deep_Learning_Keras\lib\site-packages\keras\engine\network.py”,第 1085 行,保存 save_model(self, filepath, overwrite, include_optimizer) 文件“C:\ProgramData\Anaconda2\envs\Building_Deep_Learning_Keras\lib\site- packages\keras\engine\saving.py",第 117 行,在 save_model },默认 =get_json_type).encode('utf8') 文件 "C:\ProgramData\Anaconda2\envs\Building_Deep_Learning_Keras\lib\json__init__.py",行237,在转储中 **kw).encode(obj) 文件“C:\ProgramData\Anaconda2\envs\Building_Deep_Learning_Keras\lib\json\encoder.py”,第 198 行,在编码块 = self.iterencode(o,_one_shot=True) 文件“C:\ProgramData\Anaconda2\envs\Building_Deep_Learning_Keras\lib\json\encoder.py”,第 256 行,在 iterencode 返回 _iterencode(o, 0) 文件“C:\ProgramData\Anaconda2\envs\Building_Deep_Learning_Keras \lib\site-packages\keras\engine\saving.py",第 84 行,在 get_json_type 返回 obj.item() AttributeError: 'numpy.dtype' object has no attribute 'item'
如果我运行以下代码,我没有问题:
model = Sequential()
model.add(Embedding(max_fatures, embed_dim,input_length = X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(lstm_out, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(3,activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,train_size=0.8, random_state = 42)
model.fit(X_train, Y_train, epochs = 1, batch_size=32,shuffle=True)
model.save('test.h5')
解决方案
我相信您遇到这个问题是因为 Keras 在dtype
创建功能模型时如何处理参数。Keras 期望dtype
只是一个简单的字符串而不是一个numpy.dtype
对象,因此,当您将一个 numpy 对象传递给此参数时,它将很难保存模型。
为了进行调整,我将使用其中一个字符串来描述数据输入类型,如https://keras.io/backend/中所建议的那样。
我有一个类似的问题,当我将dtype
参数更改为 Keras 所期望的(字符串)时,我能够保存模型而没有任何其他问题。
为了解决您的问题,我建议将dtype=X_train.dtype
参数更改为dtype=X_train.dtype.name
,因为这会产生 的字符串形式dtype
,可以由 Keras 处理。
推荐阅读
- r - 编织 R-Markdown 文档会导致“!未定义的控制序列”。错误
- javascript - 创建响应式导航栏时出现意外结果
- node.js - NodeJS:从数组缓冲区查看和下载 PDF
- apache-spark - pyspark - 结构化流到弹性搜索
- python-3.x - 尝试使用 python 复制文件时出现此 errno 2
- php - PHP/Laravel - 从键有数据的数组中获取键名
- flutter - 如何使用颤振在数据表中设置宽度并使行彼此靠近
- javascript - 下拉导航项在链接中不一致
- javascript - 从表格单元格复制到剪贴板
- node.js - 发布新的 NPM 包时未找到 E404