c++-default_random_engine 始终创建相同的数字序列

2024-01-01

我正在使用神经网络,我想随机创建权重。所以,如果我创建 30 个神经网络,每个神经网络最终都会具有相同的权重(应该是随机的),所以当我给它们所有相同的输入时,输出是相同的,而事实并非如此。有什么帮助吗?

这是主要功能

int main(){
std::vector<Improved_NN> v;
std::random_device rd;
std::default_random_engine generator(rd());
std::uniform_real_distribution<double> distribution(-1.0,1.0);
for(int i = 0; i < 30; i++)
{
    Improved_NN temp;
    temp.initialize_weights(generator, distribution);
    v.push_back(temp);
}

Board temp;

for(int i = 0; i < 30; i++)
{
    std::cout <<"\n" << v[i].executeFromExternal(temp);
}

初始化权重在这里:

 void Improved_NN::initialize_weights(std::default_random_engine gen,std::uniform_real_distribution<double> dist){
int k,v = 0;
for(k = 0;k<NUM_HIDDEN_1;k++){
    for(v = 0 ; v < NUM_INPUTS; v++){
        mlp_t.w_h1_i[k][v]=dist(gen);
        //std::cout<<mlp_t.w_h1_i[k][v]<<std::endl;
    }
}
for(k = 0;k<NUM_HIDDEN_2;k++){
    for(v = 0 ; v < NUM_HIDDEN_1; v++){
        mlp_t.w_h2_h1[k][v]=dist(gen);
        //std::cout<<mlp_t.w_h2_h1[k][v]<<std::endl;
    }
}
for(k = 0;k<NUM_HIDDEN_3;k++){
    for(v = 0 ; v < NUM_HIDDEN_2; v++){
        mlp_t.w_h3_h2[k][v]=dist(gen);
        //std::cout<<mlp_t.w_h3_h2[k][v]<<std::endl;
    }
}
    for (int a = 0 ; a < NUM_HIDDEN_3;a++){
        mlp_t.w_o_h[0][a] = dist(gen);
        //std::cout<<mlp_t.w_o_h[0][a]<<std::endl;
    }
}

这是我每次执行时得到的输出。

0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458 0.521458

非常感谢。


好吧,就像普通的旧的一样rand()您需要为生成器提供初始种子,该种子需要具有不同的值,以便生成器生成不同的序列:

    std::random_device rd;
    std::default_random_engine generator(rd());

另外,正如 user3018144 指出的那样,使用单个生成器,而不是 30 个不同的生成器:

int main(){
    std::vector<Improved_NN> v;
    std::random_device rd;
    std::default_random_engine generator(rd());
    std::uniform_real_distribution<double> distribution(-1.0,1.0);

    for(int i = 0; i < 30; i++)
    {
        Improved_NN temp;

        /*Problem is here*/
        temp.initialize_weights(generator, distribution);
        v.push_back(temp);
    }

    Board temp;

    for(int i = 0; i < 30; i++)
    {
        std::cout <<"\n" << v[i].executeFromExternal(temp);
    }


//for the number of generations, do this....
}

另外,就在这里:

 void Improved_NN::initialize_weights(std::default_random_engine gen,std::uniform_real_distribution<double> dist){

您按值传递生成器,这将创建现有生成器的副本。通过引用传递:

 void Improved_NN::initialize_weights(std::default_random_engine& gen, std::uniform_real_distribution<double>& dist){
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++-default_random_engine 始终创建相同的数字序列 的相关文章

  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标

随机推荐

  • 回购同步重复路径问题

    我已经为oneplus构建cyanogenmod有一段时间了 我已经用boeffla内核替换了库存内核 但是截至今天我遇到了一个问题 之前能够与新内核重新同步 一切都说现在当我进行回购同步时 致命 home noahvt BuildServ
  • 在android中创建缩放位图时保持图像质量

    我有一张尺寸为 960x800 的图像 我试图让它填满屏幕 我目前的做法是加载完整的 960x800 位图并使用源和目标Rect对象 到目前为止 我的目标矩形为 480x320 屏幕尺寸 源矩形为 960x800 background Bi
  • 如何使用“...”(变量)参数? [复制]

    这个问题在这里已经有答案了 可能的重复 C 和 C 中的可变参数函数是什么 https stackoverflow com questions 3870128 what are variadic functions in accordanc
  • 放大一条曲线,使其可以沿着 R 图中的另一条曲线显示

    我有一个 R 图 我想在其中展示IF the red curve 现在位于图的底部 未正确显示 乘以一个常数 它可以match the blue curve目前显示 我想知道我怎样才能最好scale up the 红 曲线以便它准确地mat
  • Apache Derby - java.sql.SQLException:无法启动数据库

    首先 这是我第一次使用 Apache Derby 我正在使用 netbeans 愿意使用嵌入式 apache derby 并且我按照以下教程配置和安装数据库 然后 我使用项目属性将 derby jar 文件附加到我的项目中 http net
  • Angular2 - ngOnDestroy() 未在类似路线上调用

    我有一个 Angular2 应用程序 其路线如下 path component ContentComponent children path folder folderId resolve currentFolder CurrentFold
  • 使用 CefSharp v65 加载本地 html/css/js 文件

    我正在尝试在 WinForms 中使用 CefSharp v65 加载本地 html css js 文件 我找到了与此相关的其他堆栈溢出帖子 但他们都没有使用新的内置版本FolderSchemeHandlerFactory 而不是实现他们自
  • 如果第二个输入字段已填充,则禁用输入字段

    完全是个新手 我只想知道当第二个输入字段被填充时如何动态禁用输入字段 eg td td
  • 将列中的所有行更新为新值

    抱歉 我确信这个问题已经被问过很多次了 但我已经四处寻找一个很好的例子 但一直没能找到 我想运行一种方法将值插入到表中所有行的特定列中 为了让您了解我正在使用的方法和查询 这是我的学生表的工作更新方法 public void updateS
  • 拉丁字符检查

    那里有一些类似的问题 但没有一个是完全相同的或者有适合我的答案 我需要一个javascript函数来验证文本字段是否包含所有有效的拉丁字符 因此没有cryllic或中文 只有拉丁文 具体来说 基本拉丁语 不包括 C0 控制字符 Latin
  • 为 python 2.7 安装 MySQLdb 返回错误

    pip install MySQL python 1 2 4b4 tar gz 在 Python 2 7 ubuntu 18 04 上返回此错误 你能帮助我吗 pip install MySQL python 1 2 5 zip Proce
  • 为什么当 repo 变大时 git 操作会变慢

    我知道当 repo 变大时 git 会变慢 但为什么 由于 git 将文件存储为单独的目录和文件 git 我不知道为什么操作变慢 让我们来看看commit手术 最近 我从 master 克隆了 webkit 存储库和分支 然后我提交了一个2
  • 在 NodeJS 中使用 JSONStream 时出现内存不足问题

    我正在尝试使用 NodeJS 中的 JSONStream 库将 json 94mb 大 从 http 请求流式传输到本地文件 但是 该应用程序崩溃了out of memory错误 即使使用 256mb 内存标志调用代码 node max o
  • 扩展 lib.d.ts 中定义的变量的类型定义

    我有一些使用 mootools 的遗留代码需要转换 Mootools 引入了一个新的带有两个参数的 Element 构造函数 我没有找到 mootools 的任何类型定义文件 所以我必须自己编写 Typescript 标准库 lib d t
  • 清单合并失败:需要为 显式指定 android:exported

    合并错误 错误 android exported 需要为元素显式指定 面向 Android 12 及更高版本的应用需要指定 显式值android exported当对应的组件 定义了一个意图过滤器 看https developer andr
  • 取代标准 C++ 分配器?

    我想用更强大的分配器替换标准分配器 C 标准只需要对 vector resize 进行溢出检查 许多库提供的各种 C 分配器在提供负面的自测试时都会一败涂地 我可以使用更强大的分配器 ESAPI 的分配器不仅检查溢出 还具有调试工具来帮助发
  • 如何从GZIPed数据的InputStream中获取解压缩数据的InputStream?

    我调用一个返回 gzip 压缩文件的服务 我将数据作为输入流 由javax activation DataHandler getInputStream 来自响应 我想做的是 在不向磁盘写入任何内容的情况下 获取存档中文件中解压缩数据的 In
  • 具有独立条件的 NHibernate 查询...

    我有这个 var query session Query
  • 与 java 和 .net 相比,mcrypt blowfish php 结果略有不同

    以下是一些更改了键值和有效负载的示例代码 key 4rTInjwg H nA key base64 decode key data val 100 val 200 val 300 val 400 val 500 val 600 val 70
  • c++-default_random_engine 始终创建相同的数字序列

    我正在使用神经网络 我想随机创建权重 所以 如果我创建 30 个神经网络 每个神经网络最终都会具有相同的权重 应该是随机的 所以当我给它们所有相同的输入时 输出是相同的 而事实并非如此 有什么帮助吗 这是主要功能 int main std