我发现在使用TensorFlow实现的许多可用的neural network代码中,正则化术语通常是通过手动添加额外的损失值来实现的。 我的问题是: 有没有一种更优雅或推荐的正规化方式比手动? 我也发现get_variable有一个参数regularizer 。 应该如何使用? 根据我的观察,如果我们通过正规化器(例如tf.contrib.layers.l2_regularizer ,将会计算一个表示正则化术语的张量,并将其添加到一个名为tf.GraphKeys.REGULARIZATOIN_LOSSES的图集合中,该集合是否会被自动使用通过TensorFlow(例如在训练时用于优化器)?还是预计我应该自己使用该集合?
在阅读关于经常性neural network的图灵完备性的一些论文时(例如:用neural network的图灵计算能力,Hava T. Siegelmann和Eduardo D. Sontag,1991),我感觉到那里给出的证据并不是真的实际的。 例如,参考论文需要一个neural network,其神经元活动必须具有无限的精确性(以可靠地表示任何有理数)。 其他certificate需要无限大小的neural network。 显然,这不是那么实际。 但是现在我开始想知道是否完全有理由要求图灵的完整性。 严格的定义是,目前没有计算机系统是图灵完备的,因为它们都不能模拟无限大的磁带。 有趣的是,如果编程语言规范完成或者没有完成,那么编程语言规范就会将其最常开放。 这一切都归结为是否能够分配更多的内存以及函数调用堆栈大小是否无限。 大多数规范没有真正指定这个。 当然,这里所有可用的实现都是有限的,所以编程语言的所有实际实现都不是图灵完整的。 所以,你可以说,所有的计算机系统和有限状态机一样强大,而不是更多。 这就引出了一个问题: 图灵完全可以说有多有用? 回到neural network:对于neural network(包括我们自己的大脑)的任何实际实现,它们将不能表示无限数量的状态,即通过对图灵完备性的严格定义,它们不是图灵完备的。 那么问题是否neural network是图灵完全有意义呢? 问题是否像有限状态机一样强大已经早得多了(1954年由明斯基回答,当然答案是肯定的),似乎也更容易回答。 也就是说,至less在理论上,这已经certificate它们和任何一台计算机一样强大。 其他一些问题更多的是我真正想知道的: 有什么理论术语可以对计算机的计算能力做更具体的说明吗? (由于其有限的内存空间) 如何比较neural network的实际实现与计算机的计算能力? (图灵完备性如上所述是没有用的。)
任何好的教程与源将演示如何开发neural network(步湾台阶的傻瓜;-))
虽然“googl'ing”和做一些研究,我没有find任何严重/stream行的科学GPGPU计算和OpenCL的AMD硬件框架/ SDK。 有没有我错过的文学和/或软件? 特别是我对深度学习感兴趣。 对于我所知的所有deeplearning.net推荐的NVIDIA硬件和CUDA框架。 另外,我所知道的所有大型深度学习框架,例如Caffe , Theano , Torch , DL4J ……都专注于CUDA,并且不打算支持OpenCL / AMD 。 此外,人们可以find大量的科学论文以及基于CUDA的深度学习任务的相应文献,但基于OpenCL / AMD的解决scheme几乎没有。 2015/16年度基于OpenCL / AMD的解决scheme是否有可能出现新的或现有的科学框架? OpenCL / AMD 深度学习的良好开端是什么? 任何文学? 教程? 杂项来源?
我最近遇到了tf.nn.sparse_softmax_cross_entropy_with_logits ,我无法弄清楚与tf.nn.softmax_cross_entropy_with_logits相比有什么不同。 使用sparse_softmax_cross_entropy_with_logits时,训练向量y必须是单热编码的唯一区别吗? 读取API我无法find与softmax_cross_entropy_with_logits相比有任何其他区别…但为什么我们需要额外的function呢? softmax_cross_entropy_with_logits是否与softmax_cross_entropy_with_logits产生相同的结果,如果提供了一个热门编码的训练数据/向量?
我所看到的所有关于neural network的例子都是针对图像和固定长度数据的固定input。 你如何处理可变长度的数据,如句子,查询或源代码? 有没有办法将可变长度数据编码成固定长度的input,仍然可以得到neural network的泛化特性?
我正在寻找一个开源的neural network库。 到目前为止,我已经看过FANN,WEKA和OpenNN。 我应该看看其他人吗? 当然,标准是文档,示例和易用性。
我正试图从头开始build立一个neural network。 在所有人工智能文献中都有一个共识,即应该将权重初始化为随机数,以便networking更快地收敛。 但是,为什么neural network初始权值初始化为随机数? 我曾经在某处读过这样做是为了“打破对称”,这使得neural network学得更快。 如何打破对称使得学习速度更快? 不会将权重初始化为0是一个更好的主意? 这样权重就能够更快地find它们的值(无论是正值还是负值)? 有没有其他的背后的理念背后随机化的权重,希望他们会接近最佳值时初始化?
如果我想在Keras中使用BatchNormalization函数,那么我只需要在开始时调用它一次吗? 我读了这个文档: http : //keras.io/layers/normalization/ 我不明白我应该怎么称呼它。 下面是我的代码试图使用它: model = Sequential() keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None) model.add(Dense(64, input_dim=14, init='uniform')) model.add(Activation('tanh')) model.add(Dropout(0.5)) model.add(Dense(64, init='uniform')) model.add(Activation('tanh')) model.add(Dropout(0.5)) model.add(Dense(2, init='uniform')) model.add(Activation('softmax')) sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='binary_crossentropy', optimizer=sgd) model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2) 我问,因为如果我运行包括批规范化的第二行的代码,如果我没有第二行运行代码,我得到类似的输出。 所以要么我没有在正确的地方调用函数,要么我认为这并没有太大的区别。
我一整天都在分析一个应用程序,并且优化了一些代码,我把它留在了我的待办事项列表中。 这是一个neural network的激活function,被称为超过1亿次。 根据dotTrace,它占总function时间的大约60%。 你将如何优化这个? public static float Sigmoid(double value) { return (float) (1.0 / (1.0 + Math.Pow(Math.E, -value))); }