mhallsmoore / qstrader

QuantStart.com - QSTrader backtesting simulation engine.
https://www.quantstart.com/qstrader/
MIT License
2.79k stars 842 forks source link

ValueError: attempt to get argmax of an empty sequence #357

Closed LeakySpoon closed 5 months ago

LeakySpoon commented 3 years ago

import sys import numpy as np from keras.datasets import mnist

np.random.seed(1)

(x_train, y_train), (x_test, y_test) = mnist.load_data()

images, labels = (x_train[0:1000].reshape(1000, 28 * 28) / 255, y_train[0:1000]) one_hot_labels = np.zeros((len(labels), 10)) for i, l in enumerate(labels): one_hot_labels[i][l] = 1 labels = one_hot_labels

test_images = x_test.reshape(len(x_test), 28 * 28) / 255 test_labels = np.zeros((len(y_test), 10)) for i, l in enumerate(y_test): test_labels[i][l] = 1

def tanh(x): return np.tanh(x) def tahn2deriv(output): return 1 - (output ** 2) def softmax(x): temp = np.exp(x) return temp / np.sum(temp, axis = 1, keepdims = True)

alpha, iterations, hidden_size = (2, 300, 100) pixels_per_image, num_labels = (784, 10) batch_size = 100

weights_0_1 = 0.02 np.random.random((pixels_per_image, hidden_size)) - 0.01 weights_1_2 = 0.2 np.random.random((hidden_size, num_labels)) - 0.1

for j in range(iterations): correct_cnt = 0 for i in range(int(len(images) / batch_size)): batch_start, batch_end = ((i batch_size), ((i+1) batch_size)) layer_0 = images[batch_start : batch_end] layer_1 = tanh(np.dot(layer_0, weights_0_1)) dropout_mask = np.random.randint(2, size=layer_1.shape) layer_1 = dropout_mask 2 layer_2 = softmax(np.dot(layer_1, weights_1_2))

    for k in range(batch_size):
        correct_cnt += int(np.argmax(layer_2[k : k+1]) == \
                           np.argmax(labels[batch_start + k : batch_start + k + 1]))
    layer_2_delta = (labels[batch_start : batch_end] - layer_2)\
                                                / (batch_size * layer_2.shape[0])
    layer_1_delta = layer_2_delta.dot(weights_1_2.T) \
                    * tahn2deriv(layer_1)
    layer_1_delta = layer_1_delta * dropout_mask

    weights_1_2 += alpha * layer_1.T.dot(layer_2_delta)
    weights_0_1 += alpha * layer_0.T.dot(layer_1_delta)

test_correct_cnt = 0
for i in range(len(test_images)):
        layer_0 = test_images[i:1 + 1]
        layer_1 = tanh(np.dot(layer_0, weights_0_1))
        layer_2 = np.dot(layer_1, weights_1_2)
        test_correct_cnt += int(np.argmax(layer_2) == \
                                np.argmax(test_labels[i:i + 1]))

if(j % 10 == 0): sys.stdout.write("\n" + "I:" + str(j) + \ " Test accuracy:" + str(test_correct_cnt / float(len(test_images))) + \ " Train accuracy:" + str(correct_cnt / float(len(images))))

mhallsmoore commented 3 years ago

Hi @LeakySpoon,

The above code snippet seems unrelated to QSTrader.

Could I ask if you have an issue with the software?

Cheers,

-Mike.