RedMery 2020-03-01 14:45 采纳率: 0%
浏览 3647

keras模型的预测(predict)结果全是0

使用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.]]

不懂为什么会这样,即便随机生成一组数据作为输入,结果也是这样

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-01 17:39
    关注

    先调用fit去训练。没有训练的模型当然结果肯定不对

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办