小编Sha*_* RC的帖子

为什么神经网络的权重应该初始化为随机数?

我试图从头开始构建一个神经网络.在所有AI文献中,人们都认为权重应该初始化为随机数,以便网络更快地收敛.

但为什么神经网络的初始权重被初始化为随机数?

我曾在某处读到这样做是为了"打破对称性",这使得神经网络学得更快.打破对称性如何让它学得更快?

将权重初始化为0是不是更好的主意?那样,权重能够更快地找到它们的值(无论是正面还是负面)?

除了希望在初始化时它们接近最佳值时,是否存在一些其他潜在的哲学背后的权重?

artificial-intelligence machine-learning mathematical-optimization neural-network gradient-descent

92
推荐指数
4
解决办法
4万
查看次数

神经网络不收敛时可以尝试的事情

关于神经网络的最受欢迎的问题之一似乎是:

救命!!我的神经网络没有收敛!

这里这里这里这里这里

因此,在消除网络实施中的任何错误之后,应该尝试的最常见方法是什么?

我知道,尝试尝试的方法会因网络体系结构而异。但是,在构建自己的神经网络时,您可以调整哪些参数(学习率,动量,初始权重等)并实现哪些新功能(窗动量?)以克服一些类似的问题?

如果可能,请提供与语言无关的答案。这个问题的目的是为那些陷入神经网络而无法收敛的人们提供一些指示。

artificial-intelligence machine-learning neural-network

8
推荐指数
2
解决办法
1万
查看次数

从菜单中删除"开始听写"和"特殊字符"

为了在我的Cocoa应用程序中启用复制和粘贴,我在菜单中添加了两个新菜单项(复制和粘贴),并将选择器从每个项目拖动到第一个响应者(复制和粘贴).但是,复制和粘贴菜单项下方会显示两个额外的项目:"开始听写"和"特殊字符".

我无法弄清楚它们出现的原因或我如何删除它们.

最理想的是,我甚至不希望复制和粘贴菜单项可见.我只是希望我的应用程序的用户能够将内容(即从电子邮件,文本文档等)粘贴到我的应用程序中的一个表单上的文本字段中.

macos xcode cocoa objective-c nsmenuitem

8
推荐指数
3
解决办法
2775
查看次数

将vector <std :: string>转换为vector <double>

我有一个字符串向量{"1.2","3.4","0.5","200.7"}.

我想将每个元素转换为double并将其存储在一个vector<double>.

像这样 {1.2,3.4,0.5,200.7}

最好的方法是什么?

我知道std::stod(string, size); 但我希望有更好的方法来做到这一点.

我在寻找类似的东西:

vector<double> doubleVector = convertStringVectortoDoubleVector(myStringVector);
Run Code Online (Sandbox Code Playgroud)

似乎没有那样的东西; 那么下一个最好的东西是什么?


编辑:这是我最终使用的:

std::vector<double> convertStringVectortoDoubleVector(const std::vector<std::string>& stringVector){
std::vector<double> doubleVector(stringVector.size());
std::transform(stringVector.begin(), stringVector.end(), doubleVector.begin(), [](const std::string& val)
                 {
                     return stod(val);
                 });
return doubleVector;}
Run Code Online (Sandbox Code Playgroud)

如需完整答案,请查看zac howland的回答和Chris Jester-Young的回答.(PS这完全基于Zac的答案)谢谢

c++ vector std c++11

7
推荐指数
2
解决办法
1万
查看次数

在keras中拆分图层的输出

说,我有一个输出dims(4,x,y)的图层.我想把它分成4个单独的(1,x,y)张量,我可以用它作为4个其他层的输入.

我基本上寻找的是与Merge层相反的东西.我知道keras中没有分割层,但是在keras中有一个简单的方法吗?

python machine-learning neural-network deep-learning keras

6
推荐指数
2
解决办法
5344
查看次数

神经网络发散而不是融合

我已经实现了一个有2层的神经网络(使用CUDA).(每层2个神经元).我试图让它使用反向传播学习2个简单的二次多项式函数.

但它没有收敛,而是发散(输出变得无穷大)

以下是我尝试过的更多细节:

  • 我已经将初始权重设置为0,但由于它是分歧的,我已经随机化了初始权重
  • 我读到如果学习率太高,神经网络可能会发散,所以我将学习率降低到0.000001
  • 我试图让它添加的两个函数是:3 * i + 7 * j+9j*j + i*i + 24(我给出了图层ij输入)
  • 我以前将它实现为单层,可以更好地逼近多项式函数
  • 我正在考虑在这个网络中实施势头,但我不确定这会有助于它学习
  • 我正在使用线性(如无)激活功能
  • 在开始时存在振荡,但是当任何权重变得大于1时,输出开始发散

我检查并重新检查了我的代码,但似乎没有任何问题.

所以这是我的问题:这里出了什么问题?

任何指针将不胜感激.

artificial-intelligence machine-learning neural-network

4
推荐指数
2
解决办法
3553
查看次数

通过常数乘以设备向量

我正在使用推力进行项目,它似乎缺少一些基本功能: -

在c ++中,将向量乘以常量的最简单方法是使用std::transform,std::bind1st如下所示:

std::transform(vec.begin(), vec.end(), vec.begin(),
           std::bind1st(std::multiplies<double>(),myConst)); 
Run Code Online (Sandbox Code Playgroud)

但显然bind1stbind2nd不能与推力工作.

那么,是否有一种简单的方法可以将矢量乘以推力常数?

PS:目前我正在使用我自己的仿函数来进行乘法运算:

thrust::for_each(vec.begin(), vec.end(), multiplyByConstant<double>(myConst))
Run Code Online (Sandbox Code Playgroud)

哪里

    template< typename T >
    struct multiplyByConstant
    {
    const T constant;

    multiplyByConstant(T _constant) : constant(_constant) {}

     __host__ __device__
     void operator()( T& VecElem) const 
      {
        VecElem=VecElem*constant;
      }
    };
Run Code Online (Sandbox Code Playgroud)

但是编写一个仿函数进行简单的乘法似乎有些过分.肯定必须有一个更简单的方法.

c++ cuda vector thrust

4
推荐指数
2
解决办法
2059
查看次数

禁用文本区域/输入UIWebview中的长按菜单

这似乎是这里最常讨论的主题之一,但我找不到真正有效的解决方案.我发布这个问题是为了分享我找到的解决方案以及希望找到更好/更清洁的解决方案

情况描述:

  • 我的应用程序中有一个UIWebview

  • webview中有文本输入/区域

  • 长按文本区域/输入会显示上下文菜单,其中包含"剪切","复制","定义"等.

我们需要在不禁用用户输入的情况下禁用此菜单.


到目前为止我尝试过的东西(东西不起作用):

覆盖canPerformAction

此解决方案告诉我们要添加canPerformAction:withSender:到UIWebview的子类或UIWebview的委托中.

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender
{
 if (action == @selector(defineSelection:))
 {
    return NO;
 }
 else if (action == @selector(translateSelection:))
 {
    return NO; 
 }
 else if (action == @selector(copy:))
 {
    return NO;
 }

return [super canPerformAction:action withSender:sender];
}
Run Code Online (Sandbox Code Playgroud)

不起作用,因为canPerformAction:在此类中没有调用显示的菜单项.由于sharedMenuController与Responder链中的第一个响应者进行交互,因此在容器中实现canPerformAction会跳过select和selectAll,因为它们已经由子菜单处理.

操纵CSS

将以下内容添加到CSS:

html {
    -webkit-user-select: none;
    -webkit-touch-callout: none;
    -webkit-tap-highlight-color:rgba(0,0,0,0);
}
Run Code Online (Sandbox Code Playgroud)

这适用于图像和超链接,但不适用于输入.:(

contextmenu objective-c uiwebview cordova

4
推荐指数
1
解决办法
2103
查看次数

如何在c ++中迭代日期范围

我有一个包含csv文件的文件夹.每个csv文件由日期命名(例如,01JAN2013.csv,02JAN2013.csv).我必须按日期顺序读取文件(开始日期和结束日期已知).

所以我试图循环从开始日期到结束日期的日期,以生成文件名.

目前我在做:

vector<string> dd{"01", "02", "03", "04", "05", "06", "07", "08", "09","10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20","21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
vector<string> mmm{"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG","SEP", "OCT", "NOV", "DEC"};
vector<string> yyyy{"2011","2012","2013","2014"};

string filePath=DataFolderPath;

for(int i=0;i<yyyy.size();i++)
{
    for(int j=0;j<mmm.size();j++)
    {
        for(int k=0;k<dd.size();k++)
        {
            filePath.append(dd[k]);
            filePath.append(mmm[j]);
            filePath.append(yyyy[i]);
            filePath.append(".csv");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

绝对丑陋,但它完成了工作.

有没有更简单的方法来循环C++中的日期.有点像:

for ( currentDate = starDate; currentDate < endDate; currentDate++) {

//Do stuff

 } …
Run Code Online (Sandbox Code Playgroud)

c++ iteration loops date

2
推荐指数
1
解决办法
2711
查看次数