神经网络,模型对比,图片多分类
wins系统,keras 运行报错:pydot failed to call GraphViz解决步骤:1、 安装下面3个pip install pydot-ngpip install graphvizpip install pydot2.安装GraphViz具体安装步骤:1.官网下一个graphviz安装包安装:https://graphviz.gitlab.io/_pages/Download
·
如何使用python神经网络实现图片分类
import numpy as np
import cv2
import os
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Flatten, Dropout, Activation, Conv2D, MaxPooling2D
import joblib
from keras.models import load_model
main_dir = "file/"
def get_category(root):
category = root.split(os.path.sep)[1]
return category
def create_test_data(path):
X = []
y = []
for root, dirs, files in os.walk(path):
for file in files:
if 'DS' in file:
continue
filepath = os.path.join(root, file)
category = get_category(filepath)
img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)
new_img_array = cv2.resize(img_array, size=(80, 80))
X.append(new_img_array)
y.append(category)
return X, y
def process_data(X, y):
X = np.array(X).reshape(-1, 80, 80, 1)
y = np.array(y)
X = X / 255.0
return X, y
def build_model1(class_num,X_shape):
model = Sequential()
model.add( Conv2D(64, (3, 3), activation='relu', input_shape=X_shape) )
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add( Dense(class_num, activation='softmax') )
model.compile(loss="sparse_categorical_crossentropy",
optimizer="adam",
metrics=["accuracy"])
return model
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
def build_model2():
model = RandomForestRegressor(n_estimators=100, random_state=42)
return model
X, y = create_test_data(main_dir)
X, y_labels = process_data(X, y)
print(X.shape)
class_num = len(np.unique(y))
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(y_labels)
model1 = build_model1(class_num ,X.shape[1:])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4,random_state=10)
history = model1.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=2, batch_size=10)
evaluation_result = model1.evaluate(X_test,y_test)
print(f"Loss: {evaluation_result[0]:.4f}")
print(f"Accuracy: {evaluation_result[1]*100:.2f}%")
model2 = build_model2()
model2.fit( X_train.reshape( X_train.shape[0],-1) , y_train, validation_data=(X_test.shape[0],-1, y_test))
evaluation_result = model1.evaluate(X_test,y_test)
print(f"Loss: {evaluation_result[0]:.4f}")
print(f"Accuracy: {evaluation_result[1]*100:.2f}%")
model1.save("model1.h5")
joblib.dump(model2, "model2.joblib")
joblib.dump(label_encoder, "label_encoder.joblib")
loaded_model1 = load_model('model.h5') # Keras模型使用load_model加载
loaded_model2 = joblib.load('model2.joblib') # 使用joblib加载随机森林模型
loaded_label_encoder = joblib.load("label_encoder.joblib") # 使用joblib加载标签编码器
y_new_encoded = loaded_label_encoder.transform(y_test)
predictions1 = loaded_model1.predict(X_test)
predictions2 = loaded_model2.predict(X_test)
predicted_classes1 = np.argmax(predictions1, axis=1)
print("Model 1 Predictions (Classes):", predicted_classes1)
print("Model 2 Predictions:", predictions2)
更多推荐
已为社区贡献1条内容
所有评论(0)