如何为Keras顺序模型指定input_shape

时间:2018-12-26 18:16:49

标签: python python-3.x keras sequential

您如何处理此错误?

检查目标时出错:预期density_3的形状为(1,),但数组的形状为(398,)

我尝试更改input_shape =(14,)(即train_samples中的列数),但是仍然出现错误。

set = pd.read_csv('NHL_DATA.csv')
set.head()

train_labels = [set['Won/Lost']] 
train_samples = [set['team'], set['blocked'],set['faceOffWinPercentage'],set['giveaways'],set['goals'],set['hits'],
            set['pim'], set['powerPlayGoals'], set['powerPlayOpportunities'], set['powerPlayPercentage'],
           set['shots'], set['takeaways'], set['homeaway_away'],set['homeaway_home']]

train_labels = np.array(train_labels)
train_samples = np.array(train_samples)

scaler = MinMaxScaler(feature_range=(0,1))
scaled_train_samples = scaler.fit_transform(train_samples).reshape(-1,1)

model = Sequential()

model.add(Dense(16, input_shape=(14,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(Adam(lr=.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(scaled_train_samples, train_labels, batch_size=1, epochs=20, shuffle=True, verbose=2)

1 个答案:

答案 0 :(得分:0)

1)您用.reshape(-1,1)重塑了训练示例,这意味着所有训练样本都具有1维。但是,您将网络的输入形状定义为input_shape=(14,),该形状告诉输入维为14。我想这是模型的一个问题。

2)您使用了sparse_categorical_crossentropy,这意味着基本事实标签是稀疏的(train_labels应该是稀疏的),但我想事实并非如此。

以下是输入内容的示例:

import numpy as np
from tensorflow.python.keras.engine.sequential import Sequential
from tensorflow.python.keras.layers import Dense

x = np.zeros([1000, 14])
y = np.zeros([1000, 2])

model = Sequential()

model.add(Dense(16, input_shape=(14,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile('adam', 'categorical_crossentropy')
model.fit(x, y, batch_size=1, epochs=1)