我正在学习Tensorflow的基础知识。所以我认为一个好的第一步是尝试做一个简单的线性回归,从有噪声的数据中确定一条线的方程。
所以,我的第一步是生成数据:
import random;
import matplotlib.pyplot as pyplot
RAND_RANGE = range(-100,100);
X_RANGE = range(-10,10);
NOISINESS = 0.5;
NOISE_RANGE = range(int(RAND_RANGE.start * NOISINESS), int(RAND_RANGE.stop * NOISINESS));
m = random.randrange(RAND_RANGE.start, RAND_RANGE.stop); # Python devs... Why doesn't a function that gets something IN A RANGE have an overload that takes a range... Huh?!
c = random.randrange(RAND_RANGE.start, RAND_RANGE.stop);
n = [random.randrange(NOISE_RANGE.start, NOISE_RANGE.stop) for _ in X_RANGE];
real_x = [x for x in X_RANGE];
real_y = [m * x + c for x in real_x];
noisy_y = [m * x + c + n for x, n in zip(real_x, n)];
这似乎工作得很好(为简洁起见,不包括绘图代码):
因此,我试图将其加载到一个基本的张量流模型中,如下所示:
import tensorflow as tf;
import numpy as np;
from tensorflow import keras;
from tensorflow.keras import layers;
features = np.array(real_x);
labels = np.array(real_y);
line_model = tf.keras.Sequential(
[
layers.Dense(units=1)
]
)
line_model.build(input_shape=[len(real_y)]);
line_model.summary();
line_model.compile(
optimizer = tf.keras.optimizers.Adam(learning_rate=0.1), loss='mean_absolute_error'
)
history = line_model.fit(
features,
labels,
epochs=100,
verbose=0
)
然而,正是在这里,我遇到了问题。
Every
tutorial
我发现它似乎只是使用numpy从CSV文件中加载数据,然后盲目地将其扔给Tensorflow,而没有真正解释它期望数据的形式。
我很可能误解了什么,但据我所知,我的
real_x
价值观是我的特征和
real_y
值就是标签。
所以我尝试了以下方法:
-
将XY值放入单独的numpy数组中
-
将XY值放入单个二维numpy数组中
-
各种值
input_shape
(我认为它应该只是一个包含项目数量的单一值,但这给了我一个错误,即密集需要至少2个维度)
在尝试这些不同的事情时,我犯了各种不同的错误。
我觉得我在这里错过了一些基本的东西,这不应该太复杂,但我不愿意从我不理解的教程中批量复制代码(因此,我为什么要尝试做自己的练习,这与他们正在做的练习相邻,但不同)。
我在这里做错了什么,我应该如何以一种让我预测的方式将这些数据加载到模型中
m
和
c
(或一系列去噪
y
然后我可以计算出的值
m
和
c
作为额外步骤)
realx
和
noisy_y
?