更新19/06/06
您好,我使用此tutorial。我按照说明进行了所有操作。但是我的网络是一个随机值生成器=)完全误解了我的错。我将不胜感激。
from tensorflow.keras.models import load_model
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Convolution2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np
from keras.preprocessing import image
classifier = Sequential()
# Step 1 - Convolution
classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))
# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
#сжатие
classifier.add(Flatten())
#full connection
classifier.add(Dense(128, activation='relu'))
classifier.add(Dense(1, activation='sigmoid'))
#compiling CNN
classifier.compile(optimizer='adam',loss='binary_crossentropy', metrics=['accuracy'])
train_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory(
'dataset/training_set',
target_size=(64,64),
batch_size=32,
class_mode='binary'
)
test_set = train_datagen.flow_from_directory(
'dataset/test_set',
target_size=(64,64),
batch_size=32,
class_mode='binary'
)
classifier.fit_generator(
training_set,
steps_per_epoch = 8000,
epochs = 25,
validation_data = test_set,
validation_steps = 2000
)
model = load_model('my_model1.h5')
model.summary()
test_image = image.load_img('random10.jpg',target_size=(64,64,3))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
result=classifier.predict(test_image)
training_set.class_indices
if result[0][0]>=0.5:
prediction='dog'
else:
prediction='cat';
print((result[0][0])*100)
print(prediction)
from tensorflow.keras.models import load_model
classifier.save('my_model1.h5')
我试图增加时期数,但这没有帮助
答案 0 :(得分:0)
我真的无法理解“不同的方式”这个词,但是我想这是“每次运行此代码都会得到不同的答案”。
问题是,您对“没什么不同”有什么期望?
使用此代码执行的操作是在每次运行时再次对其进行训练。
您首先需要了解一些事情,每次调用classifier = Sequential()
而不使用classifier.load_weights()
时,它将使用随机数来初始化权重。
因此,每次您运行此代码,甚至运行世界上每个权重不同的代码,都永远不会预测出完全相同的值(result
)。
现在,如果要在几个时期后预测正确答案而当前模型无法做到这一点,那么您需要做的就是增加模型大小。
这样的事情。
classifier = Sequential()
classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Convolution2D(64, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Convolution2D(128, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Convolution2D(256, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
#full connection
classifier.add(Dense(128, activation='relu'))
classifier.add(Dense(1, activation='sigmoid'))