0

我的目标是为花卉建立一个图像分类模型。数据 RAR 文件包含一个名为 train data 的文件夹,其中包含大约 16000 张从 0 到 16000 标记的图像。同样,还有一个用于测试数据的文件夹。

除此之外,还有两个 csv 工作簿。第一个 csv 工作簿包含两个属性 - 标签和花卉类。有 104 个标签和花卉类。第二个工作簿还包含两个属性 - id 和花类。这个 csv 是火车图像文件夹和花卉类之间的链接。ID 是链接属性。例如,假设火车图像文件夹中标记为 10 的图像是向日葵的图像。因此,在 csv 工作簿中,对应于 id = 10 的花类条目是向日葵。例如,假设火车数据文件夹中标记为 10 的图像是向日葵。因此,在(第二个)工作簿中,对应于 id =10 的花类条目是向日葵。

这是我的代码

# Import relavant libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers import Dense, Flatten
from sklearn.model_selection import train_test_split
from PIL import Image

# Load the csv files
# Workbook no.1 
label_csv = pd.read_csv('/content/flowers_label.csv')
# Workbook no.2
train = pd.read_csv('/content/flowers_idx.csv')

# To sort the train csv id wise from 0 - 16464
train.sort_values('id')

# Creating inputs and targets
X = [] #images
y = [] # labels

base = "/content/flower_tpu/flower_tpu/flowers_google/flowers_google//"

row = 0;
for idx in range(len(train)):
  # get the flower row
  flower = train.iloc[idx]
  # create flower path
  path = f"{base}{flower.id}.jpeg"
  #load image
  img = Image.open(path)
  # convert to numpy
  img = np.array(img)
  #save to X
  X.append(img)

  # get label
  label = label_csv[label_csv['flower_class'] == flower.flower_cls].label.values[0]
  # save to y
  y.append(label)

# Train Validation split
X_train, X_validation, y_train, y_validation = train_test_split(X, y, random_state=12, test_size=0.2)


# The model
output_size = 104
hidden_layer_size = 150
model = tf.keras.Sequential([
                            tf.keras.layers.Flatten(input_shape=(224, 224, 3)),
                            tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
                            tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
                            tf.keras.layers.Dense(output_size, activation='softmax')
                            ])


# Converting all data into ndarrays
X_train = np.asarray(X_train)
y_train = np.asarray(y_train)
X_validation = np.asarray(X_validation)
y_validation = np.asarray(y_validation)


# Compilation
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])


# Fitting
model.fit(X_train, y_train, epochs=3, validation_data=(X_validation, y_validation), validation_steps=10, verbose =2)

我的代码正在运行,但训练和验证准确度低至 6%。:/ 我怎样才能改进这段代码?

4

0 回答 0