我一直在从事一个有关机器学习的项目:根据木瓜的成熟度进行分类。但因为我是这个环境的新手,所以我在 YouTube 上查找了一些有关机器学习的视频,并且关注了这位 YouTube 用户。 YouTube 用户的代码没有遇到问题,但我却遇到了问题。我跟着他做了他正在做的事情。我在网上查了这个问题,但仍然没有得到答案。
代码是:
import tensorflow as tf
import os
from tensorflow import keras
from keras.utils import img_to_array, load_img
import numpy as np
import cv2
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt
train_path = "D:/DATASETS/Red Lady/Train/"
test_path = "D:/DATASETS/Red Lady/Test/"
BatchSize = 64 # reduce the value if you have less Gpu memory
#img = load_img(train_path + "Class A/2.jpg")
#plt.imshow(img)
#plt.show()
#imgA = img_to_array(img)
#print(imgA.shape)
# Build the model
# ===============
model = Sequential()
model.add(Conv2D(filters=128, kernel_size=3, activation="relu", input_shape=(100, 100, 3)))
model.add(MaxPooling2D())
model.add(Conv2D(filters=64, kernel_size=3, activation="relu"))
model.add(Conv2D(filters=32, kernel_size=3, activation="relu"))
model.add(MaxPooling2D())
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(5000, activation="relu"))
model.add(Dense(1000, activation="relu"))
model.add(Dense(131, activation="softmax"))
print(model.summary())
# compile the model
model.compile(loss="categorical_cross entropy", optimizer="SGD", metrics=["accuracy"])
# load the data
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.3,
horizontal_flip=True,
vertical_flip=True,
zoom_range=0.3)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_path,
target_size=(100, 100),
batch_size=BatchSize,
color_mode="rgb",
class_mode="categorical",
shuffle=True)
test_generator = test_datagen.flow_from_directory(test_path,
target_size=(100, 100),
batch_size=BatchSize,
color_mode="rgb",
class_mode="categorical")
stepsPerEpoch = np.ceil(train_generator.samples / BatchSize)
ValidationSteps = np.ceil(test_generator.samples / BatchSize)
# Early Stopping
# ==============
stop_early = EarlyStopping(monitor="val_accuracy", patience=5)
# train the model
history = model.fit(train_generator,
steps_per_epoch=stepsPerEpoch, epochs=50,
validation_data=test_generator,
validation_steps=ValidationSteps,
callbacks=[stop_early])
model.save("C:/Users/MY PC/PycharmProjects/MODEL 1 (Build Model)")
**这是结果和错误: **
C:\ProgramData\anaconda3\envs\pythonProject\python.exe "C:\Users\MY PC\PycharmProjects\MODEL 1 (Build Model)\main.py"
2024-03-10 18:59:41.733172: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-03-10 18:59:41.835561: W tensorflow/tsl/framework/cpu_allocator_impl.cc:82] Allocation of 309760000 exceeds 10% of free system memory.
2024-03-10 18:59:42.116138: W tensorflow/tsl/framework/cpu_allocator_impl.cc:82] Allocation of 309760000 exceeds 10% of free system memory.
2024-03-10 18:59:42.207755: W tensorflow/tsl/framework/cpu_allocator_impl.cc:82] Allocation of 309760000 exceeds 10% of free system memory.
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 98, 98, 128) 3584
max_pooling2d (MaxPooling2D (None, 49, 49, 128) 0
)
conv2d_1 (Conv2D) (None, 47, 47, 64) 73792
conv2d_2 (Conv2D) (None, 45, 45, 32) 18464
max_pooling2d_1 (MaxPooling (None, 22, 22, 32) 0
2D)
dropout (Dropout) (None, 22, 22, 32) 0
flatten (Flatten) (None, 15488) 0
dense (Dense) (None, 5000) 77445000
dense_1 (Dense) (None, 1000) 5001000
dense_2 (Dense) (None, 131) 131131
=================================================================
Total params: 82,672,971
Trainable params: 82,672,971
Non-trainable params: 0
_________________________________________________________________
None
Found 2500 images belonging to 3 classes.
Found 652 images belonging to 3 classes.
Epoch 1/50
Traceback (most recent call last):
File "C:\Users\MY PC\PycharmProjects\MODEL 1 (Build Model)\main.py", line 85, in <module>
callbacks=[stop_early])
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\MYPC~1\AppData\Local\Temp\__autograph_generated_fileuv05hknk.py", line 15, in tf__train_function
retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
ValueError: in user code:
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\training.py", line 1160, in train_function *
return step_function(self, iterator)
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\training.py", line 1146, in step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\training.py", line 1135, in run_step **
outputs = model.train_step(data)
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\training.py", line 994, in train_step
loss = self.compute_loss(x, y, y_pred, sample_weight)
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\training.py", line 1053, in compute_loss
y, y_pred, sample_weight, regularization_losses=self.losses
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\compile_utils.py", line 240, in __call__
self.build(y_pred)
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\compile_utils.py", line 183, in build
self._get_loss_object, self._losses
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\engine\compile_utils.py", line 353, in _get_loss_object
loss = losses_mod.get(loss)
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\losses.py", line 2649, in get
return deserialize(identifier)
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\losses.py", line 2607, in deserialize
printable_module_name="loss function",
File "C:\ProgramData\anaconda3\envs\pythonProject\lib\site-packages\keras\utils\generic_utils.py", line 770, in deserialize_keras_object
f"Unknown {printable_module_name}: {object_name}. Please "
ValueError: Unknown loss function: categorical_cross entropy. Please ensure this object is passed to the `custom_objects` argument. See https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object for details.
Process finished with exit code 1
--版本--Tensorflow = 2.11.0 Keras = 2.10.0 Python = 3.7.16
虽然损失函数可以在 model.compile() 方法中作为字符串传递,但我认为你拼写错误。尝试像这样传递它:
model.compile(loss=tf.keras.losses.CategoricalCrossentropy(),...