I figured this out. You have to normalise the tensor between 0 and 1:
# Normalise
maxVal = tensor.max()
minVal = abs(tensor.min())
maxVal = max(maxVal,minVal)
tensor = tensor / maxVal
tensor = tensor / 2
tensor = tensor + 0.5

Gets a nice result:

result.png600×1100 33 KB

and matches the weights here:
http://cs231n.github.io/understanding-cnn/ 66