keras 将一组图像传递给模型进行训练的正确方法

dgenwo3n  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(93)

我正在尝试创建一个Keras模型,用一组从路径列表中获取的图像进行训练。我知道tf.keras.utils.image_dataset_from_directory方法存在,但它不能满足我的需求,因为我想学习处理图像的正确方法,而且我需要进行回归,而不是分类。我尝试的每种方法都以这样或那样的方式失败,主要是因为x_train变量的类型是错误的。
我用来加载单个图像的最有前途的函数是:

def encode_image(img_path):
  img = tf.keras.preprocessing.image.load_img(img_path)
  img_array = tf.keras.preprocessing.image.img_to_array(img)
  img_array = tf.expand_dims(img_array, 0)
  return img_array

x_train = df['filename'].apply(lambda i: encode_image(i))

这不起作用,因为当我这样调用.fit()方法时:

history = model.fit(x_train, y_train, epochs=1)

我收到以下错误:

Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray)

这让我明白我传递的数据格式错误。有人能给我一个基本的例子来创建一个(x_train,y_train)对来提供一个模型来使用一组图像进行训练吗?非常感谢

ars1skjm

ars1skjm1#

Numpy错误可以使用**tf.convert_to_tensor()**方法修复。

img_array = tf.convert_to_tensor(img_array)

您请求的图像工作参考代码如下:

import tensorflow as tf
# Load the training and test split of the Fashion MNIST dataset
(training_images, training_labels), (test_images, test_labels) = fmnist.load_data()

# Normalize the pixel values of the train and test images
training_images  = training_images / 255.0
test_images = test_images / 255.0

# Build the classification model
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(), 
                                    tf.keras.layers.Dense(128, activation=tf.nn.relu), 
                                    tf.keras.layers.Dense(10, activation=tf.nn.softmax)])

# Declare sample inputs and convert to a tensor
inputs = np.array([[1.0, 3.0, 4.0, 2.0]])
inputs = tf.convert_to_tensor(inputs)
print(f'input to softmax function: {inputs.numpy()}')

# Feed the inputs to a softmax activation function
outputs = tf.keras.activations.softmax(inputs)
print(f'output of softmax function: {outputs.numpy()}')

prediction = np.argmax(outputs)
print(f'class with highest probability: {prediction}')

model.compile(optimizer = tf.optimizers.Adam(),
              loss = 'sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(training_images, training_labels, epochs=5)

# Evaluate the model on unseen data
model.evaluate(test_images, test_labels)

希望这能解决你的疑问。

相关问题