我试图通过将列数增加到21来扩展the tflearn example for linear regression。
from trafficdata import X,Y
import tflearn
print(X.shape) #(1054, 21)
print(Y.shape) #(1054,)
# Linear Regression graph
input_ = tflearn.input_data(shape=[None,21])
linear = tflearn.single_unit(input_)
regression = tflearn.regression(linear, optimizer='sgd', loss='mean_square',
metric='R2', learning_rate=0.01)
m = tflearn.DNN(regression)
m.fit(X, Y, n_epoch=1000, show_metric=True, snapshot_epoch=False)
print("\nRegression result:")
print("Y = " + str(m.get_weights(linear.W)) +
"*X + " + str(m.get_weights(linear.b)))
然而,tflearn抱怨:
Traceback (most recent call last):
File "linearregression.py", line 16, in <module>
m.fit(X, Y, n_epoch=1000, show_metric=True, snapshot_epoch=False)
File "/usr/local/lib/python3.5/dist-packages/tflearn/models/dnn.py", line 216, in fit
callbacks=callbacks)
File "/usr/local/lib/python3.5/dist-packages/tflearn/helpers/trainer.py", line 339, in fit
show_metric)
File "/usr/local/lib/python3.5/dist-packages/tflearn/helpers/trainer.py", line 818, in _train
feed_batch)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py", line 789, in run
run_metadata_ptr)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py", line 975, in _run
% (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (64,) for Tensor 'TargetsData/Y:0', which has shape '(21,)'
我发现形状(64,)来自tflearn.regression()的默认批量大小。
我需要转换标签(Y)吗?以什么方式?
谢谢!
答案 0 :(得分:1)
我也尝试过这样做。我进行了这些更改以使其正常工作
# linear = tflearn.single_unit(input_)
linear = tflearn.fully_connected(input_, 1, activation='linear')
我的猜测是,使用功能&gt; 1,您无法使用tflearn.single_unit()
。你可以添加额外的fully_connected图层,但最后一个图层必须只有1个神经元,因为Y.shape =(?,1)
答案 1 :(得分:0)
你有21个功能。因此,您无法使用linear = tflearn.single_unit(input_)
请尝试这样做:linear = tflearn.fully_connected(input_, 21, activation='linear')
您得到的错误是因为您的标签,即Y的形状为(1054,)。 你必须先对它进行预处理。
尝试在# linear regression graph
之前使用下面给出的代码:
Y = np.expand_dims(Y,-1)
在regression = tflearn.regression(linear, optimizer='sgd', loss='mean_square',metric='R2', learning_rate=0.01)
之前,输入以下代码:
linear = tflearn.fully_connected(linear, 1, activation='linear')