我修改了BernoulliRBM类scikit-learn以使用softmax可见单位组.在这个过程中,我添加了一个额外的Numpy数组visible_config作为类属性,它在构造函数中初始化如下,使用:
self.visible_config = np.cumsum(np.concatenate((np.asarray([0]),
visible_config), axis=0))
Run Code Online (Sandbox Code Playgroud)
其中visible_config一个Numpy数组作为构造函数的输入传递.当我直接使用该fit()函数训练模型时,代码运行没有错误.但是,当我使用该GridSearchCV结构时,我收到以下错误
Cannot clone object SoftmaxRBM(batch_size=100, learning_rate=0.01, n_components=100, n_iter=100,
random_state=0, verbose=True, visible_config=[ 0 21 42 63]), as the constructor does not seem to set parameter visible_config
Run Code Online (Sandbox Code Playgroud)
这似乎是类的实例与sklearn.base.clone创建的副本之间的相等性检查中的问题,因为visible_config没有正确复制.我不知道如何解决这个问题.它在sklearn.base.clone使用a 的文档中说deepcopy(),所以不应该visible_config复制?有人可以解释一下我可以尝试一下吗?谢谢!
如何将进程的等级作为标记传递给mpi4py.MPI.COMM_WORLD.Send()函数并使用mpi4py.MPI.COMM_WORLD.Recv()正确接收它?
我指的是使用Send和Recv函数在两个进程之间发送和接收消息的以下代码示例
#passRandomDraw.py
import numpy
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
randNum = numpy.zeros(1)
if rank == 1:
randNum = numpy.random.random_sample(1)
print "Process", rank, "drew the number", randNum[0]
comm.Send(randNum, dest=0)
if rank == 0:
print "Process", rank, "before receiving has the number", randNum[0]
comm.Recv(randNum, source=1)
print "Process", rank, "received the number", randNum[0]
Run Code Online (Sandbox Code Playgroud)
我想将发送过程的等级作为标记传递,以便接收过程可以在有多个发件人的情况下识别它.这就是我的工作
#passRandomDraw.py
import numpy
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
randNum = numpy.zeros(1)
rnk = -1 # EDIT …Run Code Online (Sandbox Code Playgroud) 有没有办法让numpy中的随机数生成器生成与Matlab相同的随机数,给定相同的种子?
我在Matlab中尝试了以下内容:
>> rng(1);
>> randn(2, 2)
ans =
0.9794 -0.5484
-0.2656 -0.0963
Run Code Online (Sandbox Code Playgroud)
以及与Numpy的iPython中的以下内容:
In [21]: import numpy as np
In [22]: np.random.seed(1)
In [23]: np.random.randn(2, 2)
Out[23]:
array([[ 1.624, -0.612],
[-0.528, -1.073]])
Run Code Online (Sandbox Code Playgroud)
两个数组中的值都不同.
或者有人建议比较Matlab和Python中使用随机数生成的相同算法的两个实现是个好主意.
谢谢!
我想将数组拆分为带有掩码和索引的数组,
如下所示
a = array([ 0, 1, 2, 3, 4, 5]))
b = [0,2,3]
Run Code Online (Sandbox Code Playgroud)
进入
c = array([[0, 2, 3], [1, 3, 4], [2, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
我可以在没有循环的情况下执行此操作吗?
编辑:
更多例子...
说,我们有一个a形状的数组,[10, 10, 10]
其中a[x, y, :] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
现在给了面具 b = [0, 3, 7]
我希望输出是一个c具有形状的数组,[10, 10, 3, 3]
其中c[x, y, :, :] = [[0, 3, 7], [1, 4, 8], [2, 5, 9]]
这个问题非常具体到Python库scikit-learn.如果最好将其发布到其他地方,请告诉我.谢谢!
现在的问题......
我有一个基于BaseEstimator的前馈神经网络类ffnn,我用SGD训练.它工作正常,我也可以使用GridSearchCV()并行训练它.
现在我想在函数ffnn.fit()中实现提前停止,但为此我还需要访问fold的验证数据.一种方法是更改sklearn.grid_search.fit_grid_point()中的行
clf.fit(X_train, y_train, **fit_params)
Run Code Online (Sandbox Code Playgroud)
变成类似的东西
clf.fit(X_train, y_train, X_test, y_test, **fit_params)
Run Code Online (Sandbox Code Playgroud)
并且还改变ffnn.fit()以获取这些参数.这也会影响sklearn中的其他分类器,这是一个问题.我可以通过检查fit_grid_point()中的某种标志来避免这种情况,该标志告诉我何时以上述两种方式之一调用clf.fit().
有人可以建议一种不同的方式来执行此操作,我不必编辑sklearn库中的任何代码吗?
或者,将X_train和y_train进一步拆分为火车/验证集并检查一个好的停止点,然后在所有X_train上重新训练模型是否正确?
谢谢!
python machine-learning neural-network scikit-learn cross-validation
我想将GridSearchCV(n_jobs> 1)用于特定的分类器,但我有来自另一个来源的10倍交叉验证的折叠信息.有没有办法输入已分成折叠的数据,而不是使用GridSearchCV创建的折叠.
谢谢!
我有一个Matlab单元阵列,其每个单元包含一个N×M矩阵.M的值随细胞而变化.
使用numpy或任何标准Python数据结构在Python中表示这种类型的结构的有效方法是什么?
这一定是一个非常基本的问题,所以请耐心等待.我有一个这样的列表列表
l = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
Run Code Online (Sandbox Code Playgroud)
我想访问外部列表中每个列表中的第二个值作为另一个列表
[2, 5, 8, 11]
Run Code Online (Sandbox Code Playgroud)
这样做是否有一步到位的方法?之前在Matlab中进行了很多编程,我试过了,l[:][1]但是它让我回归[4, 5, 6]
我有两个列表,如下:
list_1 = [(1, 2), (3, 4), (5, 6)]
list_2 = [7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
如何将两者合并为一个列表
list_3 = [(1, 2, 7), (3, 4, 8), (5, 6, 9)]
Run Code Online (Sandbox Code Playgroud)
只使用一种理解力?
我确定有人已经问过这个,但我可能无法很好地说出我的问题以找到那篇文章.
谢谢!