tensorflow - tf.keras model.predict 每次提供不同的值
问题描述
每次我跑:
y_true = np.argmax(tf.concat([y for x, y in train_ds], axis=0), axis=1)
y_pred = np.argmax(model.predict(train_ds), axis=1)
confusion_matrix(y_true, y_pred)
每次结果都与我的理解不同:
y_pred = np.argmax(model.predict(train_ds), axis=1)
每次都不同。
澄清:我运行单元 1(训练)一次。和单元格 2(推理)几次。
为什么?
代码: 单元格 1(jupyter)
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, experimental
from tensorflow.keras.layers import MaxPool2D, Flatten, Dense
from tensorflow.keras import Model
from tensorflow.keras.losses import categorical_crossentropy
from sklearn.metrics import accuracy_score
image_size = (100, 100)
batch_size = 32
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
directory,
label_mode='categorical',
validation_split=0.2,
subset="training",
seed=1337,
color_mode="grayscale",
image_size=image_size,
batch_size=batch_size,
)
inputs = Input(shape =(100,100,1))
x = experimental.preprocessing.Rescaling(1./255)(inputs)
x = Conv2D (filters =4, kernel_size =3, padding ='same', activation='relu')(x)
x = Conv2D (filters =4, kernel_size =3, padding ='same', activation='relu')(x)
x = MaxPool2D(pool_size =2, strides =2, padding ='same')(x)
x = Conv2D (filters =8, kernel_size =3, padding ='same', activation='relu')(x)
x = Conv2D (filters =8, kernel_size =3, padding ='same', activation='relu')(x)
x = MaxPool2D(pool_size =2, strides =2, padding ='same')(x)
x = Flatten()(x)
x = Dense(units = 4, activation ='relu')(x)
x = Dense(units = 4, activation ='relu')(x)
output = Dense(units = 5, activation ='softmax')(x)
model = Model (inputs=inputs, outputs =output)
model.compile(
optimizer=tf.keras.optimizers.Adam(1e-3),
loss=categorical_crossentropy,
metrics=["accuracy"])
model.fit(train_ds, epochs=5)
单元格 2:
print (Accuracy:)
y_pred = np.argmax(model.predict(train_ds), axis=1)
print (accuracy_score(y_true, y_pred))
y_pred = np.argmax(model.predict(train_ds), axis=1)
print (accuracy_score(y_true, y_pred))
输出:
118/118 [==============================] - 7s 57ms/步 - 损失:0.1888 - 准确度:0.9398
准确性:
0.593
0.586
解决方案
您确定每次运行代码时都不会再次训练模型吗?如果模型的参数相同,则相同输入的预测结果每次都应该相同。
推荐阅读
- arrays - 无法快速将数组数据加载到类数组中
- facebook - MVC5 Facebook 身份验证 - 帐户/ExternalLoginCallback?error=access_denied#_=_
- ios - 应用程序运行时无法将蓝牙耳机与 AVAudioSessionCategoryPlayAndRecord 连接
- python-3.x - networkx 和 dict_values 导致浮点参数错误
- java - 通过代码将图像加载到 imageview 将不会加载,除非我之前通过 xml 将图像提供给 imageview
- discord.py - 与python不和谐的日期和时间错误
- java - 如何在 .NET 和 android 之间共享大文件
- angular - Angular 6 错误:无法从伪造的异步测试中生成 XHR。请求网址:https://mlj0xk2yy.com/latest/static/videos
- node-sass - node-sass 在所有项目中缺少供应商文件夹
- jquery - 我如何遍历html表单并单独获取后代