基本张量流问题(输入和输出数组)



我目前正在试验Tensorflow。这里我有一个近似根函数的示例。这仍然相对简单,因为输入和输出是一个"浮点"值。

from tensorflow import keras
import numpy as np
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.add(keras.layers.Dense(100))
model.add(keras.layers.Dense(100))
model.add(keras.layers.Dense(1))
model.compile(optimizer='sgd', loss='mean_squared_error')
xs = np.array([2.0, 5.0, 7.0, 9.0, 6.0, 4.0], dtype=float)
ys = np.array([1.41, 2.23, 2.64, 3.0, 2.44, 2.0], dtype=float)
model.fit(xs, ys, epochs=200)
print(model.predict([8.0]))

但是如何创建一个以数组作为输入和输出的简单网络呢?例如:

xs = [[1,3,4,5] , [9,2,3,4]]
ys = [[22,13,9,20] , [38,36,31,22]]

如果你想提供多维数组,你需要做一些调整。例如:您的xs = [[1,3,4,5], [9,2,3,4]]具有[2,4]形状。更准确地说,如果将其转换为numpy数组,它将具有该形状,如下所示:

np.array([np.array(x) for x in xs])

因此,要在形状[2,4]的数据上训练模型,首先需要设置输入形状

model = tf.keras.Sequential([layers.Dense(units=1, input_shape=[2,4])])
model.add(layers.Dense(100))
model.add(layers.Dense(4))
model.compile(optimizer='sgd', loss='mean_squared_error')

输出层有 4 个单位,与最后一个维度相同。然后创建一些随机数据

xs = np.array([np.random.rand(2,4) for i in range(100)])
ys = np.array([xs[i]**2 for i in range(100)])

在这里,我们创建一个数组数组,每个数组的形状[2,4]和相同形状的标签数组,例如,这些数组只是正方形。

model.fit(xs, ys, epochs=10, batch_size=1)

然后将此数据传递到模型中,将批大小设置为 1,这意味着一次将处理单个形状[2,4]数组。

最后尝试用另一个随机数组预测值。请注意,这里我们需要添加另一个维度,即批大小。它不需要是 1,相反,您可以进行任意数量的预测,考虑到另一个维度是[2,4]

p = np.random.rand(1,2,4)
print(model.predict(p))

最新更新