簡體   English   中英

如何為Keras順序模型指定input_shape

[英]How to specify input_shape for Keras Sequential model

您如何處理此錯誤?

檢查目標時出錯:預期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)使用.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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM