如何确定喀拉拉邦的输入形状?

时间:2019-06-12 15:04:39

标签: python numpy keras deep-learning

在构建深度学习模型时,我很难找到错误的出处,但通常在设置输入层输入形状时会遇到问题。

这是我的模特:

model = Sequential([
Dense(32, activation='relu', input_shape=(1461, 75)),
Dense(32, activation='relu'),
Dense(ytrain.size),])

它返回以下错误:

 ValueError: Error when checking input: expected dense_1_input to have 3

 dimensions, but got array with shape (1461, 75)

数组是kaggle房屋价格竞争的训练集,我的数据集有75列和1461行。我的数组是2维的,那么为什么要3维呢?我尝试添加冗余的第3维1或在第一个致密层之前展平数组,但是错误变得简单:

ValueError: Input 0 is incompatible with layer flatten_1: expected 

min_ndim=3, found ndim=2

如何确定输入大小,为什么期望的尺寸看起来如此任意?

作为参考,我附上了其余代码:

xtrain = pd.read_csv("pricetrain.csv")
test = pd.read_csv("pricetest.csv")
xtrain.fillna(xtrain.mean(), inplace=True)
xtrain.drop(["Alley"], axis=1, inplace=True)
xtrain.drop(["PoolQC"], axis=1, inplace=True)
xtrain.drop(["Fence"], axis=1, inplace=True)
xtrain.drop(["MiscFeature"], axis=1, inplace=True)
xtrain.drop(["PoolArea"], axis=1, inplace=True)
columns = list(xtrain)
for i in columns:
    if xtrain[i].dtypes == 'object':
        xtrain[i] = pd.Categorical(pd.factorize(xtrain[i])[0])
from sklearn import preprocessing

le = preprocessing.LabelEncoder()
for i in columns:
    if xtrain[i].dtypes == 'object':
        xtrain[i] = le.fit_transform(xtrain[i])
ytrain = xtrain["SalePrice"]
xtrain.drop(["SalePrice"], axis=1, inplace=True)
ytrain = ytrain.values
xtrain = xtrain.values
ytrain.astype("float32")

size = xtrain.size
print(ytrain)
model = Sequential(
    [Flatten(),
     Dense(32, activation='relu', input_shape=(109575,)),
     Dense(32, activation='relu'),
     Dense(ytrain.size),
     ])
model.compile(loss='mse', optimizer='adam')
model.fit(xtrain, ytrain, epochs=10, verbose=1)

任何建议都会非常有用!

谢谢。

1 个答案:

答案 0 :(得分:1)

第0维(样本轴)由训练的batch_size确定。在定义输入形状时可以忽略它。这是有道理的,因为否则您的模型将取决于数据集中的样本数量

输出相同。似乎每个示例仅预测一个值("SalePrice")。因此输出层的形状为1。

model = Sequential([
    Dense(32, activation='relu', input_shape=(75, )),
    Dense(32, activation='relu'),
    Dense(1),
])