【发布时间】:2020-07-20 07:59:03
【问题描述】:
我正在尝试了解如何创建一个可以预测简单函数值的简单 tensorflow 2.2 keras 模型:
f(a, b, c, d) = a < b : max(a/2, c/3) : max (b/2, d/3)
我知道这个确切的问题可以简化为一个分类,但我的目的是找到一种建立模型的好方法,该模型可以估计值并在以后越来越复杂的条件下基于该模型构建越来越多的函数在。 首先,我偶然发现了为什么一个简单的函数能这么难。
为了在我创建的模型上使用 tensorflow:
def generate_input(multiplier):
return np.random.rand(1024 * multiplier, 4) * 1000
def generate_output(input):
def compute_func(row):
return max(row[0]/2, row[2]/3) if row[0] < row[1] else max(row[1]/2, row[3]/3)
return np.apply_along_axis(compute_func, 1, input)
for epochs in range(0, 512):
# print('Generating data...')
train_input = generate_input(1000)
train_output = generate_output(train_input)
# print('Training...')
fit_history = model.fit(
train_input, train_output,
epochs=1,
batch_size=1024
)
我尝试了不同的模型,这些模型更简单或更复杂,但我仍然没有得到很好的转换。 例如一个简单的线性:
input = Input(shape=(4,))
layer = Dense(8, activation=tanh)(input)
layer = Dense(16, activation=tanh)(layer)
layer = Dense(32, activation=tanh)(layer)
layer = Dense(64, activation=tanh)(layer)
layer = Dense(128, activation=tanh)(layer)
layer = Dense(32, activation=tanh)(layer)
layer = Dense(8, activation=tanh)(layer)
output = Dense(1)(layer)
model = Model(inputs=input, outputs=output)
model.compile(optimizer=Adam(), loss=mean_squared_error)
您能否指出解决此类条件函数应遵循的方向?
还是我错过了一些预处理?
【问题讨论】:
-
AFAIK,现在没有人使用
activation=tanh作为中间层 -relu及其变体占主导地位。 -
您的输入似乎在 [0, 1000) 的范围内。尝试对它们进行预处理,或在
generate_input中删除乘以 1000。我在 [0, 1) 中的输入得到了更好的结果。
标签: tensorflow machine-learning keras deep-learning neural-network