Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';用神经网络解释预测_Python_Tensorflow_Deep Learning - Fatal编程技术网

Python Can';用神经网络解释预测

Python Can';用神经网络解释预测,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我试图在python中使用TensorFlow,对加密货币数据进行一些预测。问题是预测的输出类似于0.1-0.9数字,而加密货币数据应该是10000-10100格式,我没有找到将0.*数字转换为真实数字的解决方案 我尝试创建一个比率,用预测值的子串max-min和测试数据的子串max-min,然后除以得到一个比率,但当我用预测值乘以这个比率时,误差率很大(发现的是14000个数字,而不是10000个) 下面是一些代码: train_start = 0 train_end = int(np.flo

我试图在python中使用TensorFlow,对加密货币数据进行一些预测。问题是预测的输出类似于0.1-0.9数字,而加密货币数据应该是10000-10100格式,我没有找到将0.*数字转换为真实数字的解决方案

我尝试创建一个比率,用预测值的子串max-min和测试数据的子串max-min,然后除以得到一个比率,但当我用预测值乘以这个比率时,误差率很大(发现的是14000个数字,而不是10000个)

下面是一些代码:

train_start = 0
train_end = int(np.floor(0.7*n))
test_start = train_end
test_end = n
data_train = data[np.arange(train_start, train_end), :]
data_test = data[np.arange(test_start, test_end), :]


Scale data:

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_train = scaler.fit_transform(data_train)
data_test = scaler.transform(data_test)

Build X and y:

X_train = data_train[:, 1:]
y_train = data_train[:, 0]
X_test = data_test[:, 1:]
y_test = data_test[:, 0]

.
.
.

n_data = 10
n_neurons_1 = 1024
n_neurons_2 = 512
n_neurons_3 = 256
n_neurons_4 = 128
n_target = 1
X = tf.compat.v1.placeholder(dtype=tf.compat.v1.float32, shape=[None, n_data])
Y = tf.compat.v1.placeholder(dtype=tf.compat.v1.float32, shape=[None])

Hidden layer
..
Output layer (must be transposed)
..
Cost function
..
Optimizer
..

Make Session:

sess = tf.compat.v1.Session()

Run initializer:

sess.run(tf.compat.v1.global_variables_initializer())

Setup interactive plot:

plt.ion()
fig = plt.figure()
ax1 = fig.add_subplot(111)
line1, = ax1.plot(y_test)
line2, = ax1.plot(y_test*0.5)
plt.show()


epochs = 10
batch_size = 256
for e in range(epochs):

# Shuffle training data
shuffle_indices = np.random.permutation(np.arange(len(y_train)))
X_train = X_train[shuffle_indices]
y_train = y_train[shuffle_indices]

# Minibatch training
for i in range(0, len(y_train) // batch_size):
    start = i * batch_size
    batch_x = X_train[start:start + batch_size]
    batch_y = y_train[start:start + batch_size]
    # Run optimizer with batch
    sess.run(opt, feed_dict={X: batch_x, Y: batch_y})

    # Show progress
    if np.mod(i, 5) == 0:
        # Prediction
        pred = sess.run(out, feed_dict={X: X_test})

        #This pred var is the output of the prediction 
我将结果持久化到一个文件中,其外观如下:

2019-08-21 06-AM;15310.444858356934;0.50021994;

2019-08-21下午12:00;14287.717187390663;0.46680558;

2019-08-21 06-PM;14104.63871795706;0.46082407;

例如,上一个预测值是0,46,但当我尝试转换它时,我发现14104,而它应该更接近10000

有人知道如何转换这些预测吗


谢谢

您必须使用
MinMaxScaler
转换回0-1范围内的输出

您还没有给出您的模型,但我相信您使用的是具有很少密集层的回归任务。你必须不断减少你的损失。如果您使用的是均方误差,损失越大,您的输出与期望的结果集相差越远

即使你的损失是一个很小的数字,结果对于火车样本来说是好的,但是预测对于测试数据集是不好的,你可能不得不考虑增加你的火车数据集,以便涵盖更多的可能性。如果这是不可能的,考虑减少神经网络中的神经元数量,使其停止过拟合。< /P>


您可以进行一些后处理,将输出限制在所需的范围内。

您必须使用
MinMaxScaler
将得到的输出转换回0-1范围内

您还没有给出您的模型,但我相信您使用的是具有很少密集层的回归任务。你必须不断减少你的损失。如果您使用的是均方误差,损失越大,您的输出与期望的结果集相差越远

即使你的损失是一个很小的数字,结果对于火车样本来说是好的,但是预测对于测试数据集是不好的,你可能不得不考虑增加你的火车数据集,以便涵盖更多的可能性。如果这是不可能的,考虑减少神经网络中的神经元数量,使其停止过拟合。< /P> 您可以进行一些后处理,将输出限制在所需的范围内