【问题标题】:keras list index out of range while fitting the model拟合模型时 keras 列表索引超出范围
【发布时间】:2021-04-14 17:26:33
【问题描述】:

无法找出错误。测试目录包含两个子文件夹,子文件夹内有图像(.jpg)文件。我试图找到模型的准确性。必须以哪种格式读取测试目录?我究竟做错了什么?在这个项目中,我正在尝试进行迁移学习来训练 用于胸部 X 射线数据集的图像识别模型。

import os
from PIL import Image
import numpy as np
import tensorflow as tf
from tensorflow import keras


test_dataset = 'C:\\Users\\arjun\\Desktop\\Rashmi\\Courses\\Deep Learning\\Project 2\\chest-xray-pneumonia\\chest_xray\\chest_xray\\test'
train_dataset = 'C:\\Users\\arjun\\Desktop\\Rashmi\\Courses\\Deep Learning\\Project 2\\chest-xray-pneumonia\\chest_xray\\chest_xray\\train'
batch_size=8

tf.keras.preprocessing.image_dataset_from_directory(
train_dataset,
labels="inferred",
label_mode="int",
class_names=None,
color_mode="rgb",
batch_size=batch_size,
image_size=(256, 256),
shuffle=True,
seed=None,
validation_split=None,
subset=None,
interpolation="bilinear",
follow_links=False,
)

base_model = tf.keras.applications.VGG16(include_top=False, 
                                     weights='imagenet',
                                     input_shape=(150,150,3), 
                                     pooling='avg')

base_model.trainable = False

inputs = keras.Input(shape=(150,150,3))
x = base_model(inputs, training = False)

x = keras.layers.Flatten()(x)
x = keras.layers.Dense(512, kernel_initializer = 'he_normal', activation = 'relu')(x)

predictions = keras.layers.Dense(1, activation = 'sigmoid')(x)

transfer_model = keras.Model(inputs, predictions)

print(transfer_model.summary())

transfer_model.compile(loss='categorical_crossentropy',
                   optimizer=keras.optimizers.SGD(lr=1e-4,momentum=0.9),
                   metrics=['accuracy']) 

transfer_model.fit(train_dataset, 
               epochs = 2, 
               shuffle=True, 
               verbose=1, 
               validation_data = test_dataset)



transfer_model.fit(train_dataset, 
               epochs = 2, 
               shuffle=True, 
               verbose=1, 
               validation_data = test_dataset)
Traceback (most recent call last):

  File "<ipython-input-104-a543f53dce65>", line 5, in <module>
validation_data = test_dataset)

  File "C:\Users\arjun\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1064, in fit
steps_per_execution=self._steps_per_execution)

  File "C:\Users\arjun\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 1112, in __init__
model=model)

  File "C:\Users\arjun\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 650, in __init__
**kwargs)

  File "C:\Users\arjun\Anaconda3\lib\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 "C:\Users\arjun\Anaconda3\lib\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 "C:\Users\arjun\Anaconda3\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 889, in __getitem__
return self._dims[key].value

IndexError: list index out of range

【问题讨论】:

  • image_dataset_from_directory 返回一个 tf.data.Dataset 对象。您需要将该对象传递给model.fit。目前您正在传递 train_dataset 这是文件路径。
  • 参考this

标签: python tensorflow keras deep-learning


【解决方案1】:

您必须将image_dataset_from_directory 函数返回到train_dataset 变量。

train_dataset = (
train_dataset,
labels="inferred",
label_mode="int",
class_names=None,
color_mode="rgb",
batch_size=batch_size,
image_size=(256, 256),
shuffle=True,
seed=None,
validation_split=None,
subset=None,
interpolation="bilinear",
follow_links=False,
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2020-01-17
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多