Sieć neuronowa Tensorflow TypeError: Argument Fetch ma niepoprawny typ


11

Tworzę prostą sieć neuronową za pomocą tensorflow, z danymi, które sam zebrałem, ale to nie współpracuje: PI napotkał błąd, którego nie mogę naprawić lub znaleźć dla, a chciałbym za twoją pomoc.

Błąd:

Błąd typu: argument pobierania 2861.6152 z 2861.6152 ma niepoprawny typ, musi być łańcuchem lub tensorem. (Nie można przekształcić float32 w tensor lub operację.)

Błąd odnosi się do następującego wiersza w moim kodzie:

_, cost = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

Już zorientowałem się, że błąd nie występuje, gdy komentuję następujące wiersze w moim kodzie:

prediction = neural_network_model(champion_data)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, item_data))
optimizer = tf.train.AdamOptimizer().minimize(cost)
_, cost = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

Więc gdzieś jedna z tych linii otrzymuje coś, co nie wygląda dokładnie tak, jak się spodziewa. Próbowałem już oczywistego (usunięcie np.array () z batch_input i batch_output lub zastąpienie go list ()), ale to nie rozwiązuje problemu. Moja obecna hipoteza jest taka, że ​​wyjście neural_network_model (champion_data) jest w jakiś sposób niewłaściwym kształtem lub typem, jednak nie jestem pewien, jak to przetestować lub jak rozwiązać, jeśli tak się stanie.

Pełny kod można znaleźć tutaj: https://gist.github.com/HasseIona/4bcaf9f95ae828e056d5210a2ea07f88

Edycja: Sprawdziłem, że dane bohatera, które są wprowadzane do modelu neuronowego_sieci, prognozy i kosztu są tensorami. Próbowałem rozwiązać problem, używając hipotezy, że problem leży w części feed_dict = {} kodu, ale jak dotąd nie dotarłem

Odpowiedzi:


17

Problem polegał na dwukrotnym użyciu nazwy „koszt”, problem został rozwiązany poprzez zmianę tego:

_, cost = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

do tego:

_, c = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

W ten sposób nazwa zmiennej „c” nie koliduje już z częścią kodu [optymalizator, koszt].


niezwykle przydatna odpowiedź
lenhhoxung
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.