1.4学习日记

虚幻4引擎学习日记----个人2d游戏开发_1 博主最近在日常网络冲浪时突然有了一个idea,想要制作一款小游戏,说是小游戏,但是博主也有一个大理想,就是做大做强,咳咳,先做一个2d小游戏,然后扩展到3d版,最后成为一个世界!… (此处假装有掌声) 但是博主买了好多书,都没什么精力学,绝不是因为游戏耗费了我大部分精力。 楼主想要先做成电脑端的游戏,然后再转到移动端。 因此,看了一下,当前市面主流游戏开发引擎有Unreal4,Unity3d两个巨头,还有一些比较小众的(博主前几年在steam买了Godot Engine,RPG GameMaker,APP 阅读详情

一、把实战班第三节下终于看完了,但是代码也是似懂非懂的

1.深度学习项目的目的就是得到一个好的模型:能够预测到好的y。根据预测值y‘与真实值y的差值不断训练模型,使最终能够预测得到比较好的y

2.Linear()表示全连接,能够改变维度

3.一定要学会计算参数量

import matplotlib.pyplot as plt
import torch
import numpy as np
import csv
import pandas as pd
from torch.utils.data import DataLoader, Dataset
import torch.nn as nn
from torch import optim
import time
from sklearn.feature_selection import SelectKBest, chi2
import os

os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"


def get_feature_importance(feature_data, label_data, k=4, column=None):
    """
    此处省略 feature_data, label_data 的生成代码。
    如果是 CSV 文件,可通过 read_csv() 函数获得特征和标签。
    这个函数的目的是, 找到所有的特征种, 比较有用的k个特征, 并打印这些列的名字。
    """
    model = SelectKBest(chi2, k=k)  # 定义一个选择k个最佳特征的函数
    feature_data = np.array(feature_data, dtype=np.float64)
    # label_data = np.array(label_data, dtype=np.float64)
    X_new = model.fit_transform(feature_data, label_data)  # 用这个函数选择k个最佳特征
    # feature_data是特征数据,label_data是标签数据,该函数可以选择出k个特征
    print('x_new', X_new)
    scores = model.scores_  # scores即每一列与结果的相关性
    # 按重要性排序,选出最重要的 k 个
    indices = np.argsort(scores)[::-1]  # [::-1]表示反转一个列表或者矩阵。
    # argsort这个函数, 可以矩阵排序后的下标。 比如 indices[0]表示的是,scores中最小值的下标。

    if column:  # 如果需要打印选中的列
        k_best_features = [column[i + 1] for i in indices[0:k].tolist()]  # 选中这些列 打印
        print('k best features are: ', k_best_features)
    return X_new, indices[0:k]  # 返回选中列的特征和他们的下标。


class CovidDataset(Dataset):
    def __init__(self, file_path, mode="train", all_feature=False, feature_dim=6):
        with open(file_path, "r") as f:
            ori_data = list(csv.reader(f))
            column = ori_data[0]
            csv_data = np.array(ori_data[1:])[:, 1:].astype(float)
        feature = np.array(ori_data[1:])[:, 1:-1]
        label_data = np.array(ori_data[1:])[:, -1]
        if all_feature:
            col = np.array([i for i in range(0, 93)])
        else:
            _, col = get_feature_importance(feature, label_data, feature_dim, column)
        col = col.tolist()
        if mode == "train":  # 逢5取1.
            indices = [i for i in range(len(csv_data)) if i % 5 != 0]
            data = torch.tensor(csv_data[indices, :-1])
            self.y = torch.tensor(csv_data[indices, -1])
        elif mode == "val":
            indices = [i for i in range(len(csv_data)) if i % 5 == 0]
            data = torch.tensor(csv_data[indices, :-1])
            self.y = torch.tensor(csv_data[indices, -1])
        else:
            indices = [i for i in range(len(csv_data))]
            data = torch.tensor(csv_data[indices])
        data = data[:, col]
        self.data = (data - data.mean(dim=0, keepdim=True)) / data.std(dim=0, keepdim=True)
        self.mode = mode

    def __getitem__(self, idx):
        if self.mode != "test":
            return self.data[idx].float(), self.y[idx].float()
        else:
            return self.data[idx].float()

    def __len__(self):
        return len(self.data)


class MyModel(nn.Module):
    def __init__(self, inDim):
        super(MyModel, self).__init__()
        self.fc1 = nn.Linear(inDim, 64)
        self.relu1 = nn.ReLU()
        self.fc2 = nn.Linear(64, 1)

    def forward(self, x):  # 模型向前过程
        x = self.fc1(x)
        x = self.relu1(x)
        x = self.fc2(x)

        if len(x.size()) > 1:
            return x.squeeze(1)

        return x


def train_val(model, train_loader, val_loader, device, epochs, optimizer, loss, save_path):
    model = model.to(device)

    plt_train_loss = []  # 记录所有轮次记录值
    plt_val_loss = []

    min_val_loss = 99999999999999

    for epoch in range(epochs):
        train_loss = 0.0
        val_loss = 0.0
        start_time = time.time()

        model.train()  # 模型调整为训练模式
        for batch_x, batch_y in train_loader:
            x, target = batch_x.to(device), batch_y.to(device)
            pred = model(x)
            train_bat_loss = loss(pred, target, model)
            train_bat_loss.backward()
            optimizer.step()  # 更新模型
            optimizer.zero_grad()
            train_loss += train_bat_loss.cpu().item()
        plt_train_loss.append(train_loss / train_loader.__len__())

        model.eval()
        with torch.no_grad():
            for batch_x, batch_y in val_loader:
                x, target = batch_x.to(device), batch_y.to(device)
                pred = model(x)
                val_bat_loss = loss(pred, target, model)
                val_loss += val_bat_loss.cpu().item()
        plt_val_loss.append(val_loss / val_loader.__len__())
        if val_loss < min_val_loss:
            torch.save(model, save_path)
            min_val_loss = val_loss

        print("[%03d/%03d] %2.2f sec(s) Trainloss: %.6f | Val_loss: %.6f" % \
              (epoch, epochs, time.time() - start_time, plt_train_loss[-1], plt_val_loss[-1]))

    plt.plot(plt_train_loss)
    plt.plot(plt_val_loss)
    plt.title("loss")
    plt.legend(["train", "val"])
    plt.show()


def evaluate(sava_path, test_loader, device, rel_path):  # 得出测试结果文件
    model = torch.load(sava_path).to(device)
    rel = []
    with torch.no_grad():
        for x in test_loader:
            pred = model(x.to(device))
            rel.append(pred.cpu().item())
    print(rel)
    with open(rel_path, "w", newline='') as f:
        csvWriter = csv.writer(f)
        csvWriter.writerow(["id", "tested_positive"])
        for i, value in enumerate(rel):
            csvWriter.writerow([str(i), str(value)])
    print("文件已经保存到" + rel_path)


all_feature = False
if all_feature:
    feature_dim = 93
else:
    feature_dim = 6

train_file = "covid.train.csv"
test_file = "covid.test.csv"

train_dataset = CovidDataset(train_file, "train")
val_dataset = CovidDataset(train_file, "val")
test_dataset = CovidDataset(test_file, "test")

batch_size = 16
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1, shuffle=False)

# for batch_x, batch_y in train_loader:
#     print(batch_x, batch_y)

# model = MyModel(inDim=93)

# predy = model(batch_x)

device = "cuda" if torch.cuda.is_available() else "cpu"
print(device)

config = {
    "lr": 0.001,
    "epochs": 20,
    "momentum": 0.9,
    "save_path": "model_save/best_model.pth",
    "rel_path": "pred1.csv"
}


# 正则化,loss=loss+W*W 让每个loss加上参数的平方,让参数也越小越好,模型曲线更平滑,不容易过拟合
def mseLoss_with_reg(pred, target, model):
    loss = nn.MSELoss(reduction='mean')
    ''' Calculate loss '''
    regularization_loss = 0  # 正则项
    for param in model.parameters():
        # TODO: you may implement L1/L2 regularization here
        # 使用L2正则项
        # regularization_loss += torch.sum(abs(param))
        regularization_loss += torch.sum(param ** 2)  # 计算所有参数平方
    return loss(pred, target) + 0.00075 * regularization_loss  # 返回损失。


model = MyModel(inDim=feature_dim).to(device)
loss = mseLoss_with_reg
optimizer = optim.SGD(model.parameters(), lr=config["lr"], momentum=config["momentum"])

train_val(model, train_loader, val_loader, device, config["epochs"], optimizer, loss, config["save_path"])

evaluate(config["save_path"], test_loader, device, config["rel_path"])

lenovo联想拯救者Legion Y9000P 2022款2023款2024款笔记本电脑(82RF,82WK,82WQ,83DE,83DF)原装出厂Windows11预装OEM系统镜像下载 联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家、联想浏览器、联想软件商店、legionzone控制中心等预装程序。链接:https://pan.baidu.com/s/1YBji_oh7xOkq-NxnS8Mm8g?链接:https://pan.baidu.com/s/1S7_enXmuoja1a9ASvUT5Fg?拯救者Legion Y9000P IRX9H 2024款【83DE】原厂Win11系统包。 阅读详情

相关推荐

SIGIR 2026:信息检索前沿技术与投稿指南

信息检索(Information Retrieval, IR)是计算机科学中处理大规模数据检索的核心技术,其基本原理是通过算法模型从海量数据中高效提取相关信息。随着深度学习的发展,神经信息检索(Neural IR)和多模态检索成为研究热点,如稠密检索模型(DPR)和跨模态预训练(CLIP)等技术的应用显著提升了检索精度。这些技术不仅在学术领域具有重要价值,还在电商搜索、医疗检索等实际场景中展现出巨大潜力。SIGIR作为信息检索领域的顶级会议,汇聚了全球顶尖学者和工业界专家,是展示最新研究成果的重要平台。本文

weixin_29189363的博客 287

虚幻4学习日记1 初试虚幻4

1、前言 由于从小喜欢玩游戏,所以一直对游戏开发感兴趣,也曾经在EPIC下载过虚幻4。但是当时只是叶公好龙,下载完之后UE4就躺在我的硬盘吃灰,然后一度被我嫌弃占硬盘把它给删掉,而今天我又把它下回来了。最近发生了很多事情,让自己对以后的路有了新的思考,也决定开始真正学习虚幻4做游戏,并把学习的过程作为记录下来放在优快云上,当做笔记。 2、下载和安装 关于下载与安装,虚幻4可以直接通过EPIC游戏平台一键下载安装,非常简单。 点击左侧“虚幻引擎”。 ...

qq_39794075的博客 408

第三篇:学习InternVL2.0(探讨代码之训练模块版)

InternVL2的训练模块

qq_69051120的博客 1244

关于UE4的C++学习日记1

关于UE4的C++学习日记1关于C++代码编译关于前置声明类型和头文件引入事件触发绑定函数 关于C++代码编译 UE4的C++类编译时有可能出现权限不够的报错,可能是类的成员的权限设置错误导致,具体可以从编辑器中编译C++代码,信息日志的编译及提交错误窗口会提示相关文件的错误地点。 关于前置声明类型和头文件引入 当C++类中需要引入另一个类时了,最好是在.H文件中进行类型的前置声明,.CPP文件中...

qq_15712829的博客 524

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 967

再见 n8n?Google Opal 实测:一句话生成 APP,这才是 AI 的正确打开方式!

Google Opal深度评测:这款自然语言生成工作流的AI工具,通过三个实战案例(科技早报生成器、冰箱食谱助手、爆款文案转译机)展示了其零代码开发的强大能力。它凭借Gemini 3.0 Pro和Google生态的无缝集成,将自动化门槛降至新低,预示着一个“意图驱动开发”的新时代。

莫潇羽的个人博客 848

4.1学习日记

使用ros2 topic echo 查看消息结构。话题重映射(remap)来更改话题名。3.可以查看检测话题是否有输出。2.用yolov5来检测。话题名字,参数,全搞定。1.节点发布图像数据。

2401_84202474的博客 211

实战派指南:反激电源EMI滤波器设计,从理论计算到PCB布局避坑

本文详细解析了反激式开关电源EMI滤波器设计的全流程,从理论计算到PCB布局避坑,结合34W PD快充电源案例,系统介绍了共模与差模干扰的识别、关键元件选型、参数计算优化及PCB布局技巧,帮助工程师有效解决传导测试超标等常见问题。

weixin_29230805的博客 373

【cuda学习日记】4.1 内存

是不能给devData的传递数据。·全局内存 – GPU中最大、延迟最高并且最常使用的内存。因此,CUDA编程的一个基本原则应是尽可能减少主机与设备之间的传输。·寄存器 – 最快的内存空间,有限的资源,核函数中声明的没有其他修饰符的自变量,核函数使用超出限制,则用本地内存。·常量内存 – 只读,修饰符是__constant__。·本地内存 – 线程私有,本质上与全局内存在同一块存储区域,所以高延迟低带宽。变量devData作为一个标识符,并不是设备全局内存的变量地址,所以。·纹理内存 – 只读。

anbncn1234的博客 501

Android Studio中把llama.cpp编译Android .so

本文介绍了一个在Android Studio中集成llama.cpp的最小Demo实现方案,通过JNI将llama.cpp编译为Android.so库,实现本地加载GGUF模型进行文本生成。文章详细说明了项目结构配置(SDK≥30,NDK≥28)、CMake编译设置、Kotlin-JNI-C++的完整调用链实现,以及模型文件部署方式。该Demo采用每次请求新建上下文的简化设计,包含加载模型、生成文本、资源释放等核心功能,并提供了错误排查建议。项目舍弃了上下文保持等复杂功能以确保稳定性,适合作为端侧大语言模型

Zhang Phil 519

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712

LT8711UX是一款高性能C/DP1.2型至HDMI2.0转换器,用于将USB Type-C源或DP1.2源连接到HDMI2.0接收器。该LT8711UX集成了一个DP1.2兼容的接收器,和一个HDMI2.0兼容的发射器。此外,还包括两个CC控制器,用于CC通信,以实现DP Alt模式和功率传输功能,一个用于上游Type-C端口和另一个用于下游端口。

weixin_63518914的博客 1639

《算法笔记》学习日记——4.1 排序

目录4.1 排序问题 A: 排序问题 B: 特殊排序问题 C: EXCEL排序问题 D: 字符串内排序问题 E: Problem B问题 F: 小白鼠排队问题 G: 中位数问题 H: 整数奇偶排序问题 I: 排名小结 4.1 排序 Codeup Contest ID:100000581 问题 A: 排序 题目描述 对输入的n个数进行排序并输出。 输入 输入的第一行包括一个整数n(1<=n&l...

一只奋斗中的本科生 599

使用 MATLAB/Simulink 对风光互补发电系统进行建模

随着全球对清洁能源的需求日益增长,风力发电和光伏发电作为两种主要的可再生能源形式,在电力供应中的占比越来越高。然而,由于风电和光伏的间歇性和不确定性,单独依赖其中任何一种能源都会给电网带来挑战。因此,风光互补发电系统(Wind-PV Hybrid System)应运而生,通过合理配置风力发电机和光伏电池板的数量,可以有效提高系统的稳定性和可靠性。此外,为了确保整个电力系统的安全稳定运行,还需要研究风光互补发电系统与主网之间的协调调度策略。本教程将详细介绍如何使用。

amy_mhd的博客 118

JavaScript学习日记4-处理图像1

翻转器:当用户将鼠标移动到图像上时会改变网页上的图像,从而对用户的操作及时做出反应。 创建翻转器 翻转器原理:有原始图像和替换图像,当用户将鼠标移动到第一个图像上时,浏览器快速将第一个图像替换为第二个图像,这样就产生了运动或动画效果。 <!DOCTYPE html> <html> <head> <style> img{ width: 200px;

qq_45457760的博客 291

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

前端学习日记(4.1)

next,分页

love218108的博客 465

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

leetcode学习日记4-全排列1&2

leetcode学习日记4-全排列1&amp;amp;amp;amp;amp;2 全排列1 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 这道题,我先写了一种非常无脑的算法。思路大概是类似深度优先搜索,每一层都从头开始搜,搜索到第一个没有用过的元素就加到temp...

weixin_44288450的博客 205

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

学习日记1/4好日子呀,好日子

初步的了解了并查序

jdjdhdha的博客 158

K210 Developer Kit 学习日记1【全文4W字】

K210芯片内部是双核CPU,指令集为RISC-V 64位,每个核心内置独立FPU,可以单独进行浮点运算;K210芯片自带计算卷积人工神经网络加速器KPU,以及处理麦克风阵列的APU,能够进行高性能机器视觉和听觉处理;K210还内置快速傅里叶变换加速器,可以进行复数FFT计算;K210芯片很注重安全性内置AES和SHA256算法加速器,为用户的数据安全提供有效保障;

weixin_46151516的博客 1409

python学习日记2020.1.4

weixin_45781827的博客 143

学习日记(1.4)(例题)

学习日记

qq_74455082的博客 184

[2021.11.1]<UE4学习日记>倒计时 & 道具增加时间

一、倒计时: 将之前的计时器Timer加以改造,初始化Timer设置为60s。 倒计时结束强制结束游戏。 二、道具增加时间: 在原先“拾取金币”的逻辑基础中,加上 增加时间 的功能。 此处设定一个金币增加5s: 三、自定义函数 1.创建 2.将 游戏胜利UI 语句 赋值其中 3. 直接调用<End Game Menu> 可自行添加输入输出 ...

热爱游戏开发的呆头熊。的小本本 2250

学习日记-人工智能导论4-通过搜索进行问题求解1

本文介绍了问题求解智能体的基本概念和搜索算法。问题求解智能体通过目标形式化、问题形式化、搜索和执行四个阶段,在已知环境中寻找最优解。搜索问题包含状态空间、初始状态、目标状态、行动、转移模型和动作代价函数等要素。文章讨论了标准化问题(如网格世界、推箱子问题)和真实世界问题(如旅行商问题、机器人导航),并详细介绍了最佳优先搜索算法及其数据结构,包括节点表示和队列类型。最后,提出了评估搜索算法的四个标准:完备性、代价最优性、时间复杂度和空间复杂度。

Harrison_Huu的博客 1400

sqli-labs学习日记1~4关

但是在url中尝试过整型注入与字符型注入回显的界面都一样,使用的什么语句进行爆破的?查看源码后发现使用了/将sql语句隔开,所以可以使用/将sql语句隔开。有sql注入点(整数型),但是在页面上不会显示有用信息‘同样在url中尝试了字符型注入与整数型注入仍然得不到回显。因为无论是整数型注入还是字符型注入都能够回显相同的界面。存在注入点,但是在url中不回显内容。添加字符型时报错,结果是字符型注入。使用sqlmap爆破得到账号和密码。在各个表中找到列的名字。数据库中表名太过庞大。直接爆破表中的字段名。

m0_64598287的博客 147

JAVA学习日记---Thinking in Java学习笔记,1-4章总结

JAVA学习日记---Thinking in Java学习笔记,1-4章总结 第一章:对象导论 在这一章介绍了JAVA所覆盖的只是包括: 1.1抽象过程:万物皆对象 1.2每个对象都有一个接口:对象的创建new 1.3每个对象都提供服务 1.4被隐藏的具体实现:使用关键字public, private,protected,以及无修饰来实现封装,注意protected与无修饰即defau

weixin_38948771的博客 455

2015-4-1C语言学习日记

20150401日报 数组: C语言中不写返回值就是int型返回值 C语言中,数组的大小不可改变 int scores[5];连续开了5个四字节的空间,数组的指针就是scores[0]的指针,其他的地址依次增加。 C语言中,是没有下标检查的,出现数组越界的时候,取到的数据是随机的数据。 全局数组和静态数组的初始值为0 而局部数组不初始化每个元素的值。   以下有几种数组的写法

TigerMouse的专栏 805

unity-VRTK学习日记1(VRTK4|无头盔开发模拟器SpatialSimulator)

VRTK的较早版本不适用于Unity的新版本,原因好像是Unity将VR开发功能并入到自家的XR下了。就是之前更新的那些XR interaction tookit。

weixin_56537692的博客 3200
下一篇: 1.5学习日记
紫薯粥zzz
博客等级 码龄5年 32粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值