我正在使用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
答案 0 :(得分:0)
为社区的利益清楚地在答案中详细说明@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
。