我是TFLearn的新手,我正在尝试使用简单的神经网络来预测输入数组时的输出数组值。
此代码的实际输入可以是灰度图像的像素值,也可以是从灰度图像中提取的特征。因此输入采用二维阵列格式。输出将是每个像素的预测颜色。
在示例代码中,我使用了两个大小为9的随机数组。我需要训练网络来预测&#t; t_y'数组时' t_x'数组作为输入。 代码运行,但预测非常差。
该代码已根据发现here
的TFLearn的MNIST示例进行了调整这是我的代码
from random import randint
import numpy as np
import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.normalization import local_response_normalization
from tflearn.layers.estimator import regression
#input
t_x = [3, 8, 7, 4, 0, 7, 9, 5, 1]
#output
t_y = [9, 5, 1, 4, 7, 9, 7, 3, 6]
x = []
y = []
for i in range(1000):
x.append(t_x)
y.append(t_y)
#array of input values
x = np.reshape(x,(-1,3,3,1))
#array of output values
y = np.reshape(y,(-1,9))
network = input_data(shape=[None, 3, 3, 1], name='input')
network = conv_2d(network, 32, 3, activation='relu', regularizer="L2")
network = max_pool_2d(network, 2)
network = local_response_normalization(network)
network = conv_2d(network, 64, 3, activation='relu', regularizer="L2")
network = max_pool_2d(network, 2)
network = local_response_normalization(network)
network = fully_connected(network, 128, activation='tanh')
network = dropout(network, 0.8)
network = fully_connected(network, 256, activation='tanh')
network = dropout(network, 0.8)
network = fully_connected(network, 9, activation='softmax')
network = regression(network, optimizer='adam', learning_rate=0.01,
loss='categorical_crossentropy', name='target')
# Training
model = tflearn.DNN(network, tensorboard_verbose=0)
model.fit({'input': x}, {'target': y}, n_epoch=20)
pred = model.predict(np.reshape(t_x,(-1,3,3,1)))
print "Prediction :", pred[0]
我假设它与' conv_2d'中指定的参数值有关。和'完全连接'功能
我需要设定哪些值才能获得准确的预测?
答案 0 :(得分:1)
代码的最后一层(fully_connected(network,9,activation ='softmax'))导致9个神经元具有softmax函数,即标准化,使得它们的总和将加起来为1.这通常是可用的(并且在MNIST中用于选择/优化选择9个可能输出值之一的函数 - 网络将输出类似[0.01 0.01 0.01 0.9 0.03 0.01 0.01 0.01 0.01],“预测”第四个值是正确的,这将与单热目标矢量(例如[0 0 0 1 0 0 0 0 0])匹配。
毋庸置疑,softmax输出不能等于[9,5,1,4,7,9,7,3,6],甚至不接近,因为所有值softmax的输出都将加起来1.即使是之前的图层也无法输出这样的值,因为tanh只能产生介于-1和1之间的值,并且不能产生9。
如果要预测1-9范围内的9个数字,那么您可能需要使用完全连接的层而不是softmax,并缩放输出以使预期输出在0到1的范围内。更多的是,但这将是一个良好的开端。