![](/img/trans.png)
[英]Keras: fix "IndexError: list index out of range" error when using 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.