如果在同一数据上测试精度波动太大,那意味着什么?

时间:2018-08-11 16:40:53

标签: tensorflow machine-learning deep-learning

我正在为自己的数据集运行张量流教程中可用的基本分类代码,有时我的测试准确度为1.0,有时为0。所以我不明白当我实际上什么也没改变。我只是多次编译相同的python代码

import scipy.io

import numpy as np
import matplotlib.pyplot as plt

import tensorflow as tf
from tensorflow import keras

mat1 = scipy.io.loadmat('matlab7.mat');
mat2 =  scipy.io.loadmat('matlab8.mat');

Training = mat1['Training7'];
Testing = mat2['Testing8'];
Class_Training = mat2['Class_Training8'];
Class_Testing = mat2['Class_Testing8'];


Training = np.ascontiguousarray(Training.T) ;
Testing = np.ascontiguousarray(Testing.T) ;

model = keras.Sequential([
keras.layers.Flatten(input_shape=(14, 98)),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(2, activation=tf.nn.softmax)
])


model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])


model.fit(Training, Class_Training, epochs=100)


test_loss, test_acc = model.evaluate(Testing, Class_Testing)

print('Test accuracy:', test_acc)

Some of the data from the training sete

1 个答案:

答案 0 :(得分:1)

您应该检查两件事:是否正确加载了数据?您的网络正常工作吗?

要检查数据是否正确加载,应打印一些示例示例,并将其与电子表格进行比较。您还应确保数据中没有NaN。您可以使用numpy进行此操作:如果数组具有NaN值,则np.any(np.is_nan(array))将返回true。

要检查网络是否正常运行,应使用玩具数据集对其进行测试。下面的代码示例训练网络以区分从均匀分布和正态分布采样的向量。该模型应该能够在100个周期后完全拟合训练数据,并且应该具有非常高的测试准确性(我得到0.96)。请注意,该代码在开始时设置了TensorFlow随机种子,以确保权重始终以相同的方式初始化。

import numpy as np

import tensorflow as tf
from tensorflow import keras as k

# Make sure weight initialization is always the same
tf.set_random_seed(0)

n_train = 100
n_test = 50
n_dim = 10
train_size = (n_train, n_dim)
test_size = (n_test, n_dim)
rand = np.random.RandomState(2)

# The training data consists of vectors sampled from a uniform distribution 
# (label 0) and vectors sampled from a normal distribution (label 1).
X_train = np.concatenate([rand.uniform(size=train_size), rand.normal(size=train_size)])
Y_train = np.concatenate([np.zeros((n_train, 1)), np.ones((n_train, 1))])
X_test = np.concatenate([rand.uniform(size=test_size), rand.normal(size=test_size)])
Y_test = np.concatenate([np.zeros((n_test, 1)), np.ones((n_test, 1))])                    

model = k.Sequential([
    k.layers.Flatten(input_shape=(n_dim,)),
    k.layers.Dense(128, activation=tf.nn.relu),
    k.layers.Dense(2, activation=tf.nn.softmax)
])

model.compile(optimizer=tf.train.AdamOptimizer(), 
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(X_train, Y_train, epochs=100)

test_loss, test_acc = model.evaluate(X_test, Y_test)

print('Test accuracy:', test_acc)

希望这会有所帮助!

相关问题