使用keras搭了一个模型并且对其进行了训练,得到模型在百度云盘中:链接:https://pan.baidu.com/s/1wQ5MLhPDfhwlveY-ib92Ew 密码:f3gk,
使用keras.predict时,无论模型输入什么输出都是0,代码如下:
from keras.models import Sequential, Model
from keras.layers.convolutional_recurrent import ConvLSTM2D
from keras.layers.normalization import BatchNormalization
from keras.utils import plot_model
from keras.models import load_model
from keras import metrics
import numpy as np
import os
import json
import keras
import matplotlib.pyplot as plt
import math
from keras import losses
import shutil
from keras import backend as K
from keras import optimizers
# 定义损失函数
def my_loss(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred, dtype = 'float64')
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.abs((y_true - y_pred) / K.clip(K.abs(y_true), K.epsilon(), None)))
# 定义评价函数metrics
def mean_squared_percentage_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred, dtype = 'float64')
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square((y_pred - y_true)/K.clip(K.abs(y_true),K.epsilon(), None)))
model_path = os.path.join('model/model' ,'model.h5')
seq = load_model(model_path, custom_objects={'my_loss': my_loss,'mean_squared_percentage_error':mean_squared_percentage_error})
print (seq.summary())
input_data = np.random.random([1, 12, 56, 56, 1])
output_data = seq.predict(input_data, batch_size=16, verbose=1)
print (output_data[0][:,:,0])
输出如下:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv_lst_m2d_1 (ConvLSTM2D) (None, None, 56, 56, 40) 59200
_________________________________________________________________
batch_normalization_1 (Batch (None, None, 56, 56, 40) 160
_________________________________________________________________
conv_lst_m2d_2 (ConvLSTM2D) (None, None, 56, 56, 40) 115360
_________________________________________________________________
batch_normalization_2 (Batch (None, None, 56, 56, 40) 160
_________________________________________________________________
conv_lst_m2d_3 (ConvLSTM2D) (None, 56, 56, 1) 1480
=================================================================
Total params: 176,360
Trainable params: 176,200
Non-trainable params: 160
None
1/1 [==============================] - 1s 812ms/step
[[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. 0.]
...
[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. -0.]]
不懂为什么会这样,即便随机生成一组数据作为输入,结果也是这样