如何修复"IndexError:列表索引超出范围"在Tensorflow中 [英] How to fix "IndexError: list index out of range" in Tensorflow

查看:236
本文介绍了如何修复"IndexError:列表索引超出范围"在Tensorflow中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Tensorflow和Keras创建一个图像分类器,但是当我尝试训练我的模型时,出现了一个错误:

IndexError:列表索引超出范围.

我认为问题出在我的模型上,因为当我删除conv2D层时,代码不会引发任何错误.

model = Sequential()

model.add(Conv2D(64,(3,3),activation='relu',padding='same'))
model.add(Conv2D(64,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Conv2D(128,(3,3),activation='relu',padding='same'))
model.add(Conv2D(128,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Conv2D(512,(3,3),activation='relu',padding='same'))
model.add(Conv2D(512,(3,3),activation='relu',padding='same'))
model.add(Conv2D(512,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Flatten())
model.add(Dense(4096,activation='relu'))
model.add(Dense(4096,activation='relu'))
model.add(Dense(2,activation='softmax'))

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',
metrices=['accuracy'])

model.fit(x_train,y_train,epochs=10)

#What is wrong in this model?

我得到的错误是:

    IndexError Traceback (most recent call last)
<ipython-input-49-83b981a8bf39> in <module>()
----> 1 model.fit(x_train,y_train,10)

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, max_queue_size, workers, use_multiprocessing, **kwargs)
   1534         steps_name='steps_per_epoch',
   1535         steps=steps_per_epoch,
-> 1536         validation_split=validation_split)
   1537 
   1538     # Prepare validation data.

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\tensor_shape.py in __getitem__(self, key)
    614         return TensorShape(self._dims[key])
    615       else:
--> 616         return self._dims[key]
    617     else:
    618       if isinstance(key, slice):

IndexError: list index out of range

解决方案

明确地在答案"中详细说明@Anubhav Singh的评论,以造福社区.

model = Sequential()之后,第一卷积层应将input_shape作为其自变量.

示例代码片段如下所示:

model.add(Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1), adding='same'))

model.compile还需要更正.参数的名称应为metrics而不是metrices.

I'm creating an Image Classifier using Tensorflow and Keras, but when I tried to train my model I got an error:

IndexError: list index out of range.

I think the problem is with my model, because when I remove the conv2D layers, then the code throws no error.

model = Sequential()

model.add(Conv2D(64,(3,3),activation='relu',padding='same'))
model.add(Conv2D(64,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Conv2D(128,(3,3),activation='relu',padding='same'))
model.add(Conv2D(128,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Conv2D(512,(3,3),activation='relu',padding='same'))
model.add(Conv2D(512,(3,3),activation='relu',padding='same'))
model.add(Conv2D(512,(3,3),activation='relu',padding='same'))
model.add(MaxPool2D((2,2),strides=(2,2)))

model.add(Flatten())
model.add(Dense(4096,activation='relu'))
model.add(Dense(4096,activation='relu'))
model.add(Dense(2,activation='softmax'))

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',
metrices=['accuracy'])

model.fit(x_train,y_train,epochs=10)

#What is wrong in this model?

The error I got is:

    IndexError Traceback (most recent call last)
<ipython-input-49-83b981a8bf39> in <module>()
----> 1 model.fit(x_train,y_train,10)

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, max_queue_size, workers, use_multiprocessing, **kwargs)
   1534         steps_name='steps_per_epoch',
   1535         steps=steps_per_epoch,
-> 1536         validation_split=validation_split)
   1537 
   1538     # Prepare validation data.

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\tensor_shape.py in __getitem__(self, key)
    614         return TensorShape(self._dims[key])
    615       else:
--> 616         return self._dims[key]
    617     else:
    618       if isinstance(key, slice):

IndexError: list index out of range

解决方案

Elaborating the Comment of @Anubhav Singh in the Answer clearly for the benefit of Community.

After model = Sequential(), the first Convolution Layer should include the input_shape as one its arguments.

Example Code Snippet can be shown below:

model.add(Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1), adding='same'))

One more correction needed is in the line, model.compile. Name of the argument should be metrics instead of metrices.

这篇关于如何修复"IndexError:列表索引超出范围"在Tensorflow中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆