【问题标题】:return self._dims[key].value IndexError: list index out of range Tensorflow indexErrorreturn self._dims[key].value IndexError: list index out of range Tensorflow indexError
【发布时间】:2020-08-24 15:56:40
【问题描述】:

在张量流中,我创建了一个以散列作为输入的常规网络。作为一个例子,我使用了内置的 python hash() 函数(是的,它在每个会话中都会改变盐,但这是一个例子) 代码是这样的:

from time import time
st = time()
import tensorflow as tf
print(time() - st)
import numpy as np
import chess
import atexit
from numpy import shape
data = open("data.data", "r").readlines()[:10000]
targets = open("targets.data", "r").readlines()[:10000]
boards_data = []
new_targets = []
for i in data:
    boards_data.append(hash(i))
for i in targets:
    new_targets.append(float(i))
print(len(new_targets))
print(len(boards_data))
print(np.array(new_targets))
print(np.array(boards_data))

def create_model():
   model = tf.keras.models.Sequential()
   model.add(tf.keras.layers.Reshape((1,1,1)))
   model.add(tf.keras.layers.Dense(1000, activation="tanh"))
   model.add(tf.keras.layers.Flatten())
   model.add(tf.keras.layers.Dense(1, activation='tanh'))
   model.compile(loss="mse", optimizer="adam", metrics=['accuracy'])
   return model

model = create_model()
model.fit(np.array(boards_data), np.array(new_targets), epochs=10)
model.predict(np.array(hash("8/6P1/5k1K/6r1/8/8/8/8 b - - 0 83")))

错误在预测中。我在How to fix "IndexError: list index out of range" in Tensorflow 看到了 conv2d 示例 但事实并非如此......

和追溯:

Traceback (most recent call last):
  File "/Volumes/POOPOO USB/lichess-bot/engines/engine2/nn_evaluation/nn_evaluation2.py", line 36, in <module>
    model.predict(np.array(hash("8/6P1/5k1K/6r1/8/8/8/8 b - - 0 83")))
  File "/Users/ofek/Library/Python/3.8/lib/python/site-packages/tensorflow/python/keras/engine/training.py", line 130, in _method_wrapper
    return method(self, *args, **kwargs)
  File "/Users/ofek/Library/Python/3.8/lib/python/site-packages/tensorflow/python/keras/engine/training.py", line 1569, in predict
    data_handler = data_adapter.DataHandler(
  File "/Users/ofek/Library/Python/3.8/lib/python/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1105, in __init__
    self._adapter = adapter_cls(
  File "/Users/ofek/Library/Python/3.8/lib/python/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 275, in __init__
    num_samples = set(int(i.shape[0]) for i in nest.flatten(inputs))
  File "/Users/ofek/Library/Python/3.8/lib/python/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 275, in <genexpr>
    num_samples = set(int(i.shape[0]) for i in nest.flatten(inputs))
  File "/Users/ofek/Library/Python/3.8/lib/python/site-packages/tensorflow/python/framework/tensor_shape.py", line 887, in __getitem__
    return self._dims[key].value
IndexError: list index out of range```

【问题讨论】:

  • 请使用完整的错误跟踪更新您的帖子,如您链接到的线程中一样。

标签: python machine-learning keras tensorflow2.0


【解决方案1】:

问题是您正在从哈希值创建一个 0d numpy 字符串。预测只能在至少一维的数组上运行。 您可以检查您的哈希值是否为 0d:

print(np.array(hash("8/6P1/5k1K/6r1/8/8/8/8 b - - 0 83")).shape)
# outputs: ()

如果您将哈希值放入列表中:

print(np.array([hash("8/6P1/5k1K/6r1/8/8/8/8 b - - 0 83")]).shape)
# outputs: (1,)

第二个np.array 预测运行没有错误。

【讨论】:

  • 预测不应干扰您的训练,而且我没有您的数据,否则无法检查可能是什么错误。我建议打开一个新问题,详细说明您面临的新问题。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 2018-02-08
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多