Diamond Square typically returns very rough results when a basic implementation of it is used. The solution to this is to modify how Diamond Square is creating your values. I'm unsure what you are trying to use it for, but one of the most common is for procedurally generated mountains.
Option 1:
At each step of the Diamond Square process, that is each time the square gets smaller, reduce the amount of new offset you are going to introduce. This will create a more realistic looking mountainous region that is less craggy and more long slopes with variations, if you are trying for that.
This reduction in offset could also come along with randomness along a scale and not just flat. Meaning that it is possible to still have crags, but they are rarer.
Option 2:
If you are intending to create a more weathered looking landscape, and not sharp crags, it would be wise to pass the result from Diamond Square into a Cellular Automata engine that smooths based on neighboring values. One that works well for me is to check if all 8 neighbors are the same height or higher. If 6 or more are, then do nothing, otherwise lower the height by one. Repeat as needed. More repetitions means a smoother landscape. Eventually it will become flat like Florida.
These are by no means the only options. But they are relatively simple ones you should be able to accomplish with a limited understanding of Diamond Square.