python分类预测 使用GUI设计后预测结果不对

python用了五种算法实现分类,除了第一种贝叶斯准确率为40左右,其他准确率都还可以,最低也有80的准确率,然后基于这些分类模型设计了一个GUI,但是预测显示没有一个是对的,反复看了好多遍,初学机器学习,又是第一次用tinkter库,实在找不到问题。希望有大L帮看一下,感谢了。


from keras.datasets import mnist
from sklearn.naive_bayes import BernoulliNB
from keras.utils import np_utils
from sklearn.multioutput import MultiOutputClassifier
import numpy as np
import random
from keras.models import Sequential
from keras.layers import Dense
from tensorflow.keras.optimizers import SGD
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn import svm
import tkinter as tk
from PIL import Image, ImageTk

# 载入数据
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
i = random.randint(1, 10000)  # 随机抽取test测试集中1-10000中的一个数i为序号
img = train_images[i].reshape(28, 28)
pil_img = Image.fromarray(np.uint8(img))


# 执行函数
def callback(num, item, train_images, train_labels, test_images, test_labels):
    # 维度变换
    train_images = train_images.reshape(60000, 28 * 28)
    test_images = test_images.reshape(10000, 28 * 28)
    # 归一化
    train_images = train_images / 255
    test_images = test_images / 255
    # 独热编码
    train_labels = np_utils.to_categorical(train_labels, num_classes=10)
    test_labels = np_utils.to_categorical(test_labels, num_classes=10)
    # 分类器模型
    train_count = 10000  # 训练用10000个样本
    # 贝叶斯预测模型
    if num == 1:
        estimator = BernoulliNB()
        multi_target_forest = MultiOutputClassifier(estimator, n_jobs=-1)
        multi_target_forest.fit(train_images[:train_count],
                                train_labels[:train_count])
        predict = np.argmax(
            multi_target_forest.predict(
                np.array(test_images[item]).reshape(1, -1)))
    # keras预测模型
    elif num == 2:
        # 创建模型 输入784个神经元,输出10个神经元
        model = Sequential([
            # 定义输出是10 输入是784,设置偏置为1,添加softmax激活函数
            Dense(units=10,
                  input_dim=784,
                  bias_initializer='one',
                  activation="softmax"),
        ])
        # 定义优化器
        sgd = SGD(learning_rate=0.2)
        # 定义优化器,loss_function,训练过程中计算准确率
        model.compile(optimizer=sgd, loss="mse", metrics=['accuracy'])
        # 训练模型
        model.fit(train_images, train_labels, batch_size=32, epochs=10)
        predict = np.argmax(
            model.predict(np.array(test_images[item]).reshape(1, -1)))
    # knn预测模型
    elif num == 3:
        estimator = KNeighborsClassifier(n_neighbors=3)
        estimator.fit(train_images[:train_count], train_labels[:train_count])
        predict = np.argmax(
            estimator.predict(np.array(test_images[item]).reshape(1, -1)))
    # 逻辑回归预测模型
    elif num == 4:
        estimator = LogisticRegression(solver='sag', max_iter=500)
        multi_target_forest = MultiOutputClassifier(estimator, n_jobs=-1)
        multi_target_forest.fit(train_images[:train_count],
                                train_labels[:train_count])
        predict = np.argmax(
            multi_target_forest.predict(
                np.array(test_images[item]).reshape(1, -1)))
    # svm支持向量机预测模型
    elif num == 5:
        estimator = svm.SVC()
        multi_target_forest = MultiOutputClassifier(estimator, n_jobs=-1)
        multi_target_forest.fit(train_images[:train_count],
                                train_labels[:train_count])
        predict = np.argmax(
            multi_target_forest.predict(
                np.array(test_images[item]).reshape(1, -1)))
    label_predict_val.config(text=predict)


# 创建一个应用窗口
window = tk.Tk()
window.title("Classification")
# 按钮
v = tk.IntVar(master=window)
button_1 = tk.Radiobutton(window, text='贝叶斯', variable=v, value=1)
button_2 = tk.Radiobutton(window, text='keras', variable=v, value=2)
button_3 = tk.Radiobutton(window, text='knn', variable=v, value=3)
button_4 = tk.Radiobutton(window, text='逻辑回归', variable=v, value=4)
button_5 = tk.Radiobutton(window, text='支持向量机', variable=v, value=5)
button_1.grid(row=0, column=0)
button_2.grid(row=0, column=1)
button_3.grid(row=0, column=2)
button_4.grid(row=0, column=3)
button_5.grid(row=0, column=4)
# 识别按键
search = tk.Button(window,
                   text="识别",
                   command=lambda: callback(num=v.get(),
                                            item=i,
                                            train_images=train_images,
                                            train_labels=train_labels,
                                            test_images=test_images,
                                            test_labels=test_labels))
search.grid(row=0, column=5)
# 测试值图片显示
pil_img = ImageTk.PhotoImage(pil_img)
label_test = tk.Label(window, text="测试值:")
label_test.grid(row=1, column=0)
pic = tk.Label(window, image=pil_img)
pic.grid(row=1, column=1)
# 预测值显示
label_predict = tk.Label(window, text="预测值:")
label_predict.grid(row=1, column=3)
label_predict_val = tk.Label(window)
label_predict_val.grid(row=1, column=4)
window.mainloop()

label_predict_val.config(text=predict)
这里按理说是输出,可是没看到界面上有 label_predict_val,也没看到你的界面更新的代码