Numpy/Keras:ValueError:无法将输入数组从形状(7,5)广播到形状(7)

2024-04-25 01:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一些分类特性转换成一个热编码,以便在Keras中使用。但是,当我试图映射这些特征时,我最终收到一个错误,指示形状不兼容。这是我的代码:

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from sklearn.preprocessing import LabelEncoder
from keras.utils import np_utils

# load dataset
dataframe = pandas.read_csv("data/development.csv")
dataset = dataframe.values

X = dataset[:,0:7].astype(int)

encoder = LabelEncoder()

for i in [3,4,5,6]:
    col = X[i]
    encoder.fit(col)
    encoded_col = encoder.transform(col)
    X[i] = np_utils.to_categorical(encoded_col) # Error is here

Y = dataset[:,7].astype(int)

下面是我收到的错误:

ValueError: could not broadcast input array from shape (7,5) into shape (7)

我在这里有什么需要改变的吗?我使用的是python3.6和keras2.2.2。在


Tags: csvfromimportdataframepandasencoder错误np
1条回答
网友
1楼 · 发布于 2024-04-25 01:34:34

根据你在上述评论中提出的问题,我提出了一个可行的解决办法。但是,我仍然不确定您要实现什么目标,因为我缺少您使用此操作的上下文。但不管怎样,还是让我试试吧。在

因此,迭代的每个X行都有它自己的标签矩阵,由to_categorical操作给出。因此,我将Y(我认为这是您想要的)作为一个列表。然后在迭代过程中,我将新创建的矩阵分配给Y列表的相应元素。在

# load dataset
dataframe = pandas.read_csv("data/development.csv")
dataset = dataframe.values

X = dataset[:,0:7].astype(int)
num_classes = np.max(X)

# Y is a list of matrices, one matrix for each row of X iterated below
Y = [None for _ in range(X.shape[0])]
encoder = LabelEncoder()

for i in [3,4,5,6]:
    col = X[i]
    # Get the number of classes present in that vector
    num_classes = np.max(X[i])

    encoder.fit(col)
    encoded_col = encoder.transform(col)
    # Set Y[i] to the new one-hot-encoded matrix
    Y[i] = np_utils.to_categorical(encoded_col) # Error is here

print([y.shape for y in Y if y is not None])

相关问题 更多 >