# ------------------------------------------------------------------
|
# Copyright (c) 2020 PyInstaller Development Team.
|
#
|
# This file is distributed under the terms of the GNU General Public
|
# License (version 2.0 or later).
|
#
|
# The full license is available in LICENSE.GPL.txt, distributed with
|
# this software.
|
#
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
# ------------------------------------------------------------------
|
|
|
import os
|
|
# Force CPU
|
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
|
|
# Display only warnings and errors
|
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
|
|
# Begin test - import tensorflow after environment variables are set
|
import tensorflow as tf # noqa: E402
|
|
# Load and normalize the dataset
|
mnist = tf.keras.datasets.mnist
|
|
(x_train, y_train), (x_test, y_test) = mnist.load_data()
|
x_train, x_test = x_train / 255.0, x_test / 255.0
|
|
# Define model...
|
model = tf.keras.models.Sequential([
|
tf.keras.layers.Flatten(input_shape=(28, 28)),
|
tf.keras.layers.Dense(128, activation='relu'),
|
tf.keras.layers.Dropout(0.2),
|
tf.keras.layers.Dense(10)
|
])
|
|
# ... and loss function
|
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
|
|
# Train
|
model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
|
model.fit(x_train, y_train, epochs=1, verbose=1)
|
|
# Evaluate
|
results = model.evaluate(x_test, y_test, verbose=1)
|
|
# Expected accuracy after a single epoch is around 95%, so use 90%
|
# as a passing bar
|
assert results[1] >= 0.90, "Resulting accuracy on validation set too low!"
|