相关疑难解决方法(0)

将索引数组转换为1-hot编码的numpy数组

假设我有一个ndy阵列

a = array([1,0,3])
Run Code Online (Sandbox Code Playgroud)

我想将其编码为2d 1-hot阵列

b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])
Run Code Online (Sandbox Code Playgroud)

有快速的方法吗?比仅仅循环a设置元素更快b.

python numpy machine-learning one-hot-encoding numpy-ndarray

191
推荐指数
9
解决办法
15万
查看次数

如何反转sklearn.OneHotEncoder转换以恢复原始数据?

我使用分类数据编码sklearn.OneHotEncoder并将其输入随机森林分类器.一切似乎都有效,我得到了预测的输出.

有没有办法扭转编码并将我的输出转换回原始状态?

python machine-learning scipy scikit-learn

14
推荐指数
5
解决办法
2万
查看次数

将类信息添加到keras网络

我试图找出如何使用Generative Adversarial Networks的数据集标签信息.我试图使用可在此处找到的条件GAN的以下实现.我的数据集包含两个不同的图像域(真实对象和草图),具有公共类信息(椅子,树,橙等).我选择了这种实现,它只将两个不同的域视为对应的不同"类"(列车样本X对应于真实图像,而目标样本y对应于草图图像).

有没有办法修改我的代码并考虑我整个架构中的类信息(椅子,树等)?我希望我的鉴别器能够预测我生成的图像来自生成器是否属于特定类,而不仅仅是它们是否真实.实际上,在当前架构中,系统学会在所有情况下创建类似的草图.

更新:鉴别器返回一个大小的张量1x7x7然后两者y_truey_pred在计算损失之前通过展平层:

def discriminator_loss(y_true, y_pred):
     BATCH_SIZE=100
     return K.mean(K.binary_crossentropy(K.flatten(y_pred), K.concatenate([K.ones_like(K.flatten(y_pred[:BATCH_SIZE,:,:,:])),K.zeros_like(K.flatten(y_pred[:BATCH_SIZE,:,:,:])) ]) ), axis=-1)
Run Code Online (Sandbox Code Playgroud)

以及鉴别器对发电机的损失功能:

def discriminator_on_generator_loss(y_true,y_pred):
     BATCH_SIZE=100
     return K.mean(K.binary_crossentropy(K.flatten(y_pred), K.ones_like(K.flatten(y_pred))), axis=-1)
Run Code Online (Sandbox Code Playgroud)

此外,我对输出1层的鉴别器模型的修改:

model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
#model.add(Activation('sigmoid'))
Run Code Online (Sandbox Code Playgroud)

现在鉴别器输出1层.如何相应修改上述损失函数?我应该有7而不是1,n_classes = 6用于预测真实和假对的+一类吗?

python conv-neural-network keras loss-function generative-adversarial-network

13
推荐指数
1
解决办法
559
查看次数

在Python中理解Euler项目的解决方案

我目前正在经历欧拉项目.我已经开始使用JavaScript了,昨天我已经切换到Python,因为我陷入了一个似乎很复杂的问题,用Javascript解决但很容易用Python解决,所以我决定从第一个问题开始蟒蛇.

我遇到问题5,它要求我找到最小的正数,它可以被1到20的所有数字整除.

我知道如何使用纸和笔来解决它,我已经使用编程解决了问题,但是为了优化它,我在欧拉项目的论坛中越过了这个解决方案.

它看起来很优雅,与我的相比它速度相当快,很荒谬,因为解决1到1000号的相同问题需要大约2秒钟,我需要几分钟.

我试图理解它,但我仍然很难理解它到底在做什么.这里是:

i = 1
for k in (range(1, 21)):
    if i % k > 0:
        for j in range(1, 21):
            if (i*j) % k == 0:
                i *= j
                break
print i
Run Code Online (Sandbox Code Playgroud)

它最初由名为lassevk的用户发布

python algorithm search

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

N选择列表的N/2个子列表

在Python中是否有一种有效的方法可以将大小列表的所有分区n分成两个大小的子集n/2?我想获得一些迭代构造,使得每次迭代提供原始列表的两个非重叠子集,每个子​​集具有大小n/2.

例如:

A = [1,2,3,4,5,6]    # here n = 6
# some iterative construct
    # in each iteration, a pair of subsets of size n/2
    # subsets = [[1,3,4], [2,5,6]] for example for one of the iterations
    # subsets = [[1,2,5],[3,4,6]] a different iteration example
Run Code Online (Sandbox Code Playgroud)

子集应该是非重叠的,例如[[1,2,3], [4,5,6]]有效但[[1,2,3], [3,4,5]]不是.两个子集的顺序无关紧要,例如[[1,2,3], [4,5,6]]不计为不同[[4,5,6], [1,2,3]],因此这两个子集中只有一个应该出现在迭代中.每个子集内的顺序也无所谓,所以[[1,2,3], [4,5,6]],[[1,3,2], [4,5,6]],[[3,2,1], [6,5,4]],等一切算相同,所以只有其中一人应在整个迭代显示.

python list permutation combinatorics

3
推荐指数
1
解决办法
373
查看次数