簡體   English   中英

索引超出范圍 tensorflow keras 與 model.fit()

[英]Index Out of Range tensorflow keras with model.fit()

I am following a blog post from Keras ( https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html ) and have trouble executing the script (original code https: //gist.github.com/fchollet/f35fbc80e066a49d65f1688a7e99f069 )。 它似乎有點老了,所以我修復了一些 Python3 問題,但它的代碼基本相同( with open/read rb/wb而不是w/b ,我將一些 arrays 轉換為 numpy ZA3CBC3F9D0CE2F2C1554E1Ber6 版本的 ZA3CBC3F9D0CE2F2C1554E1Ber671)。

def train_top_model():
  #changed because python3
  with open("bottleneck_features_train.npy", 'rb') as f:
    train_data = f.read()    

  #added int() 
  train_labels = np.array(
    [0] * (int(nb_train_samples / 2)) + [1] * (int(nb_train_samples / 2)))

  #same
  with open("bottleneck_features_validation.npy", 'rb') as f:
    validation_data = f.read()

  #added int()
  validation_labels = np.array(
    [0] * (int(nb_validation_samples / 2)) + [1] * (int(nb_validation_samples / 2)))

  #added by me so I can use .shape in Flatten()
  train_data = np.asarray(train_data)
  validation_data = np.asarray(validation_data)

  model = Sequential()
  model.add(Flatten(input_shape=train_data.shape[1:]))
  model.add(Dense(256, activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(1, activation='sigmoid'))

  model.compile(optimizer='rmsprop',
              loss='binary_crossentropy', metrics=['accuracy'])

 model.fit(train_data, train_labels,
          epochs=epochs,
          batch_size=batch_size,
          validation_data=(validation_data, validation_labels))
  model.save_weights(top_model_weights_path)

目前我得到一個

    Traceback (most recent call last):
  File "kerastry2.py", line 90, in <module>
    train_top_model()
  File "kerastry2.py", line 84, in train_top_model
    validation_data=(validation_d, validation_l))
  File "/home/user/x/KerasTry/env/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 1067, in fit
    steps_per_execution=self._steps_per_execution)
  File "/home/user/x/KerasTry/env/lib/python3.7/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1112, in __init__
    model=model)
  File "/home/usr/x/KerasTry/env/lib/python3.7/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 273, in __init__
    num_samples = set(int(i.shape[0]) for i in nest.flatten(inputs)).pop()
  File "/home/usr/x/KerasTry/env/lib/python3.7/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 273, in <genexpr>
    num_samples = set(int(i.shape[0]) for i in nest.flatten(inputs)).pop()
  File "/home/usr/x/KerasTry/env/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py", line 889, in __getitem__
    return self._dims[key].value
IndexError: list index out of range

This problem was faced ultiple times: IndexError: list index out of range in model.fit() https://github.com/tensorflow/tensorflow/issues/21894 https://github.com/tensorflow/tensorflow/issues/36649 tuple index out of range in tensorflow "IndexError: list index out of range" in model.fit() method when using Dataset in Tensorflow Keras classifier

但他們都沒有幫助我。 有人可以指出我正確的方向嗎?

這條線看起來很奇怪:

  model.add(Flatten(input_shape=train_data.shape[1:]))

嘗試更改為:

  model.add(Flatten(input_shape=train_data.shape))

暫無
暫無

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

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