#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()
相关推荐
J2虾虾12 分钟前
Spring AI Alibaba - 人工介入(Human-in-the-Loop)
java·人工智能·spring
兆。16 分钟前
LangChain框架深度解析:与FastGPT的优势对比
人工智能·langchain
tzc_fly18 分钟前
ELF:连续扩散语言模型
人工智能·语言模型·自然语言处理
昨日之日200635 分钟前
MiniCPM5-1B - 随身AI智能助手 擅长工具使用和复杂推理,长上下文处理能力强 一键整合包下载
人工智能
J2虾虾40 分钟前
Spring AI Alibaba - Skills 技能
人工智能·python·spring
冰西瓜6001 小时前
深度学习的数学原理(四十)—— Transformer 推理全过程
人工智能·深度学习·transformer
Bingorl1 小时前
机器学习之集成学习
人工智能·机器学习·集成学习
weixin_468466851 小时前
SURF 图像特征提取算法新手实战指南
图像处理·人工智能·算法·机器视觉·surf·sift
盛夏光年爱学习1 小时前
Agentic RAG 深度解析:让 Agent 自己决定要不要检索、检索几次,这才是 RAG 的正确打开方式
人工智能
weiwin1231 小时前
MAF入门(3 下):多轮对话进阶——清除历史、注入 System、截断策略
人工智能·agent