小编xjt*_*c55的帖子

如何一致地缩放数据帧MinMaxScaler()sklearn

我有三个数据帧,每个数据帧都使用MinMaxScaler()进行单独缩放.

def scale_dataframe(values_to_be_scaled)
    values = values_to_be_scaled.astype('float64')
    scaler = MinMaxScaler(feature_range=(0, 1))
    scaled = scaler.fit_transform(values)

    return scaled

scaled_values = []
for i in range(0,num_df):
    scaled_values.append(scale_dataframe(df[i].values))
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是每个数据帧都根据其自己的列min和max值进行缩放.我需要将所有数据帧缩放到相同的值,就好像它们共享整个数据的相同列的最小值和最大值一样.有没有办法用MinMaxScaler()完成这个?一种选择是制作一个大型数据帧,然后在分区之前缩放数据帧,但这不是理想的.

python scale scikit-learn

6
推荐指数
1
解决办法
7835
查看次数

Keras - 如何在 CPU 上运行加载的模型

我有在 GPU 上运行的带有 tensorflow 后端的 keras。但是,我正在训练 LSTM,所以我在 CPU 上进行训练。

with tf.device('/cpu:0'):
    model = Sequential()
    model.add(Bidirectional(LSTM(50, return_sequences=True), input_shape=(50, len(train_x[0][0]))))
    model.add(TimeDistributed(Dense(1, activation='sigmoid')))
    model.compile(loss='binary_crossentropy', optimizer='Adam', metrics=['acc'])
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我保存和加载模型时,加载模型的预测函数执行速度非常慢。经过一些定时测试,我相信正在发生的事情是加载的模型在 GPU 而不是 CPU 上运行,所以它很慢。我尝试在 CPU 上编译加载的模型,但这并没有加快速度:

model.save('test_model.h5')
new_model = load_model('test_model.h5')
with tf.device('/cpu:0'):
    new_model.compile(loss='binary_crossentropy', optimizer='Adam', metrics=['acc'])
Run Code Online (Sandbox Code Playgroud)

有没有办法使加载的模型与新训练的模型达到相同的速度?新训练的模型快了近五倍。谢谢你的帮助。

python cpu gpu keras

5
推荐指数
1
解决办法
6071
查看次数

为什么在堆栈上声明的数组的变量名称不是指针C++?

如果我声明两个数组,一个在堆栈上,一个在堆上,我在打印变量名时会得到不同的行为(如果重要的话,在gdb中).

int array_on_stack[5];

int * array_on_heap = new int[5];
Run Code Online (Sandbox Code Playgroud)

现在在gdb中,我逐步执行每行代码,然后打印变量名,期望获取每个代码的内存地址.

print array_on_stack

print array_on_heap
Run Code Online (Sandbox Code Playgroud)

但是array_on_stack它打印数组的内容而不是内存地址.为了获取内存地址,我需要命令print &array_on_stack.这表明这array_on_stack不是一个指针.有人可以解释这两个声明在如何访问其内存地址方面的区别以及为什么会出现这种情况?

c++ arrays heap stack pointers

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

keras.utils.to_categorical() - 未定义名称keras

我正在运行来自Keras网站的多层感知器(MLP)的测试脚本,用于多类softmax分类.在jupyter笔记本中运行我得到错误"名称'keras'未定义".这可能是一个我不喜欢的简单的python语法问题,但是这段代码直接来自keras所以我希望它应该按原样运行.我使用keras运行其他神经网络,所以我很确定我已经安装了所有东西(使用anaconda安装了keras).有人可以帮忙吗?我在底部包含了代码和错误.谢谢!

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

# Generate dummy data
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

model = Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, …
Run Code Online (Sandbox Code Playgroud)

python keras

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

CUDA 在哪里声明共享内存分配常量

我正在运行 1024 个矩阵的适应度函数,每个矩阵都有自己的块并且大小相同。每个块都有n*n线程(矩阵的维度)并且需要具有n*n共享内存,以便我可以轻松进行求和缩减。然而,n所有矩阵的维数在运行前都是可变的(即可以手动更改,但始终是 2 的幂,因此求和很简单)。这里的问题是共享内存必须使用常量分配,但我还需要将值从主机传递到内核。我在哪里声明维度,n以便它对 CPU 可见(用于传递给内核)并可用于声明共享内存的大小(在内核内)?

我的代码结构如下:

main.cu我调用内核:

const int num_states = 1024
const int dimension = 4

fitness <<< num_states, dimension * dimension >>> (device_array_of_states, dimension, num_states, device_fitness_return);
Run Code Online (Sandbox Code Playgroud)

然后kernel.cu我有:

__global__ void fitness(
    int *numbers, 
    int dimension, 
    int num_states, 
    int *fitness_return) {
    __shared__ int fitness[16]; <<-- needs to be dimension * dimension
    //code
}
Run Code Online (Sandbox Code Playgroud)

numbers是表示 1024 个矩阵的数组,dimension是行和列长度,num_states是 1024,fitness_return是长度为 1024 的数组,用于保存每个矩阵的适应度值。在内核中,共享内存是用 …

cuda constants declaration gpu-shared-memory

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