#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()
相关推荐
若丶相见6 分钟前
AI 大模型零基础知识扫盲
人工智能
猿人谷1 小时前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
说了很好2 小时前
PyTorch从零搭建DDPM:时间嵌入+UNet网络+扩散调度完整复现
人工智能
Bigfish_coding2 小时前
前端转agent-【python】-06 长期记忆(向量数据库 + 嵌入)
人工智能
小林ixn2 小时前
别再手写Prompt了!用AI Loop实现自动化自我迭代,效率提升10倍
人工智能·自动化运维
说了很好2 小时前
逐行注释DDPM源码:正向加噪、逆向去噪、MSE损失全流程复现
人工智能
Dilee2 小时前
Spring AI 1.1.7 接入 MCP:Filesystem Server 最小 Demo
人工智能·后端
Token炼金师3 小时前
大模型推理超参数原理详解
人工智能
Token炼金师3 小时前
大模型训练超参数:从Loss曲面到收敛策略的底层逻辑
人工智能
后端小肥肠3 小时前
Skill 囤了一堆却用不起来?我用 Codex 写了个整理神器
人工智能·agent