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

fra*_*nzy 5 python machine-learning tensorflow

我目前正在尝试 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]))
Run Code Online (Sandbox Code Playgroud)

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

xs = [[1,3,4,5] , [9,2,3,4]]
ys = [[22,13,9,20] , [38,36,31,22]]
Run Code Online (Sandbox Code Playgroud)

Sha*_*rky 2

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

np.array([np.array(x) for x in xs])
Run Code Online (Sandbox Code Playgroud)

因此,要在 shape 的数据上训练模型[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')
Run Code Online (Sandbox Code Playgroud)

输出层有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)])
Run Code Online (Sandbox Code Playgroud)

这里我们创建了一个数组的数组,每个数组的形状[2,4]和形状相同的标签数组,它们只是作为例子。

model.fit(xs, ys, epochs=10, batch_size=1)
Run Code Online (Sandbox Code Playgroud)

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

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

p = np.random.rand(1,2,4)
print(model.predict(p))
Run Code Online (Sandbox Code Playgroud)