Ошибка при проверке цели: ожидалось, что плотный_2 будет иметь форму (3,), но получил массив с формой (1,) - PullRequest
1 голос
/ 27 мая 2020

Я изменил тип данных, но не смог устранить ошибку.

Я попробовал One-Hot Encoding, но оно тоже не работает.

Я не знаю, что не так: (

seed = 0
np.random.seed(seed)
tf.set_random_seed(seed)

df = pd.read_csv('HW01_dataset_tae.txt', sep=',' ,header=None, names = ["Native", "Instructor", "Course", "Semester", "Class Size", "Evaluation"])

dataset = df.values # dataframe to int64
X = dataset[:,0:5] # attribute
Y_Eva = dataset[:,5] # class 

e = LabelEncoder()
e.fit(Y_Eva)
Y = e.transform(Y_Eva)

K = 10 
kFold = StratifiedKFold(n_splits=K, shuffle=True, random_state=seed) 

accuracy = []

for train_index, test_index in kFold.split(X,Y):
    model = Sequential() 
    model.add(Dense(16, input_dim=5, activation='relu')) 
    model.add(Dense(10, activation='relu')) 
    model.add(Dense(3, activation='softmax'))
    model.compile(loss='mean_squared_error', 
              optimizer='adam', 
              metrics=['accuracy'])
    model.fit(X[train_index], Y[train_index], epochs=100, batch_size=2)

ошибка; Ошибка при проверке цели: ожидалось, что плотный_2 будет иметь форму (3,), но здесь обнаружен массив с формой (1,)

; model.fit (X [train_index], Y [train_index], epochs = 100, batch_size = 2).

Что я кричу?

Ответы [ 2 ]

1 голос
/ 31 мая 2020

Я решил проблему.

В этом коде

model.fit(X[train_index], Y[train_index], epochs=100, batch_size=2)

количество строк в 'Y [train_index]' должно быть три, потому что классов три.

Ошибка возникла, поскольку каждый Y [train_index] имеет только одну строку.

Итак, я использовал One-Hot Encoding и изменил код следующим образом.

e = LabelEncoder()
e.fit(Y_Eva)
Y = e.transform(Y_Eva)
Y_encoded = np_utils.to_categorical(Y) # changed code

K = 10 
kFold = StratifiedKFold(n_splits=K, shuffle=True, random_state=seed) 

accuracy = []

for train_index, test_index in kFold.split(X,Y):
    model = Sequential() 
    model.add(Dense(32, input_dim=5, activation='relu')) 
    model.add(Dense(16, activation='relu')) 
    model.add(Dense(3, activation='softmax'))
    model.compile(loss='categorical_crossentropy', 
              optimizer='adam', 
              metrics=['accuracy'])
    model.fit(X[train_index], Y_encoded[train_index], epochs=100, batch_size=2) # changed code

Наконец, Мне удалось запустить код.

0 голосов
/ 27 мая 2020

TensorFlow сделал некоторую документацию по плотному слою, и если вы затем вместо того, чтобы сказать input_dim, говорит input_shape, вы можете указать предпочтительную форму. * Когда вы затем добавляете еще один плотный слой, вам фактически не нужно предоставлять input_sahpe

model.add(Dense(10))
...