#P4869.第2题-基于LSTM进行室内温度预测

第2题-基于LSTM进行室内温度预测 - problem_ide - CodeFun2000

【LSTM系列·第一篇】彻底搞懂:细胞状态、隐藏状态、候选状态、遗忘门------新手最晕的4个概念,一篇厘清_lstm遗忘门-CSDN博客

python 复制代码
import sys
import numpy as np
import math



def func():
    data = sys.stdin.read().split()
    if not data:
        return

    T = int(data[0])
    B = int(data[1])
    D = int(data[2])
    H = int(data[3])
    idx = 4
    X = np.zeros((T, B, D), dtype=np.float64)


    for t in range(T):
        row = list(map(float, data[idx: idx + B * D]))
        idx += B * D
        X[t] = np.array(row).reshape(B, D)
    
    total_param_per_gate = D*H+H*H+H
    gates = ['i','f','o','g']
    params = {}

    for gate in gates:
        param_vals = list(map(float,data[idx:idx+total_param_per_gate]))
        
        idx += total_param_per_gate 
        Wx = np.array(param_vals[:D*H]).reshape(D,H)
        Wh = np.array(param_vals[D*H:D*H+H*H]).reshape(H,H)
        b = np.array(param_vals[D*H+H*H:]).reshape(H,)
        params[gate] = (Wx,Wh,b)
    
    h_prev = np.zeros((B,H),dtype=np.float64)
    C_prev = np.zeros((B,H),dtype=np.float64)

    all_h = []

    # def sigmoid(x):
    #     x = np.clip(x,-500,500)
    #     return 1/(1+np.exp(-x))
    

    def sigmoid(x):
        x = np.array(x,dtype=float)
        result = np.empty_like(x)
        mask = (x>=0)
        result[mask] = 1/(1+np.exp(-x[mask]))
        result[~mask] = np.exp(x[~mask])/(1+np.exp(x[~mask]))

        return result
    
    for t in range(T):
        x_t = X[t]  # (B,D)
        Wx_i,Wh_i,b_i = params['i']
        Wx_f,Wh_f,b_f = params['f']
        Wx_o,Wh_o,b_o = params['o']
        Wx_g,Wh_g,b_g = params['g']

        i_t = sigmoid(x_t @ Wx_i + h_prev @ Wh_i + b_i)
        f_t = sigmoid(x_t @ Wx_f + h_prev @ Wh_f + b_f)
        o_t = sigmoid(x_t @ Wx_o + h_prev @ Wh_o + b_o)
        g_t = np.tanh(x_t @ Wx_g + h_prev @ Wh_g + b_g)

        C_t = f_t*C_prev+i_t*g_t
        h_t = o_t*np.tanh(C_t)

        all_h.append(h_t.copy())

        h_prev = h_t
        C_prev = C_t

    all_h = np.array(all_h)
    final_C = C_prev

    h_flat = all_h.reshape(-1)
    C_flat = final_C.reshape(-1)

    h_flat = np.round(h_flat,4)
    C_flat = np.round(C_flat,4)

    h_str = ' '.join(f"{x:.4f}" for x in h_flat)
    C_str = ' '.join(f"{x:.4f}" for x in C_flat)

    print(h_str)
    print(C_str)

if __name__ == '__main__':
    func()
相关推荐
米小虾7 小时前
工作流还是自主 Agent:怎么选、怎么混
人工智能·agent
FII工业富联科技服务7 小时前
AI+制造还是制造+AI?从2026工博会看工业AI落地的典型问题与解法
人工智能·制造
wangfpp7 小时前
本地大模型微调与 GGUF 部署全指南
人工智能·agent
Smoothcloud润云7 小时前
GPU算力平台跑知识库问答,模型回答总跑偏?先排查检索链路
人工智能·python·深度学习·gpu算力·gpu
mklpo1477 小时前
python3:如何按照实际执行需求导入模块,而不是启动时统一导入?(Python3.15)。2026-10-20
开发语言·人工智能·python
甲维斯8 小时前
国产Flash大乱斗!结果很意外
人工智能
Elaine10128 小时前
AI智能化项目管理(三):AI如何辅助项目文档检查?从交付物质量到流程附件审核
人工智能·ai·项目管理·项目管理工具
CServer_018 小时前
源码交付!AI+重型装备制造企业数智化平台
人工智能·物联网·制造
财迅通Ai8 小时前
中国工业具身智能机器人龙头微亿智造以物理AI大脑驱动规模交付
人工智能·机器人·微亿智造