【发布时间】:2020-12-16 00:26:47
【问题描述】:
我确信/希望这是一个非常简单的问题,但我无法找到任何答案。
我在 Keras 中创建了一个包含 366 个输入神经元和一个输出神经元的序列模型。它似乎可以很好地训练和评估,但是每当我尝试预测单个示例时,我都会得到一个形状为 (366, 1) 的 numpy 数组,尽管 model.output_shape 是 (None, 1)。
我知道here 存在一个非常相似的问题,但不幸的是,没有一个提议的解决方案能解决我的问题。
根据我的阅读,这是因为 Keras 将每个输入视为一个单独的示例来进行预测,但是,到目前为止,这对我没有帮助。
我尝试将输入作为大小为 (366, 1)、(1, 366)、(366,) 的 numpy 数组以及包含每个变体的列表传递,但没有任何效果((1, 366) 抛出错误,并且所有其他人的输出大小为(366, 1))。
如果有人能提供帮助,将不胜感激。谢谢。
代码如下:(如果不是很整洁,请见谅)
培训:
import example_generator as eg
import numpy as np
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
training_data = np.load("../data/training_data.npy", allow_pickle=True)
testing_data = np.load("../data/testing_data.npy", allow_pickle=True)
model = Sequential([
Dense(100, activation="relu"),
Dense(30, activation="relu"),
Dense(1, activation="linear")
])
model.compile(
optimizer = "Adam",
loss="mean_squared_error",
metrics="mean_absolute_error"
)
model.fit(
eg.yield_training_example(training_data, 366),
epochs=1,
steps_per_epoch = 14590,
batch_size=50
)
model.evaluate(
eg.yield_training_example(testing_data, 366),
steps = 50
)
model.save("../models/model")
用于测试:
import example_generator as eg
import numpy as np
from tensorflow.keras.models import load_model
testing_data = np.load("../../data/testing_data.npy", allow_pickle=True)
model = load_model("../../data/models/feedforward")
testing_example = next(eg.yield_training_example(testing_data, 366))
X = testing_example[0]
prediction = model.predict(
X
)
print(f"Prediction: {prediction}\nAnswer: {testing_example[1]}\n\n")
对于我用来返回示例的生成器:
import numpy as np
# Acts as an iterable of training examples
def yield_training_example(data, num_nn_inputs = 366):
for eg in data[:, 1]:
inc = 0
while (inc <= (len(eg) - num_nn_inputs - 1)):
yield (
np.array(eg[inc:(inc + num_nn_inputs), :]).astype(np.float32),
np.array(eg[(inc + num_nn_inputs), :]).astype(np.float32)
)
inc += 1
【问题讨论】:
-
您也可以发布您的代码吗?
-
@Ziri 我加了。另外,感谢您的回复。
-
我建议你开始使用 tf.data 来构建你的管道......它在后台处理了这么多......当然......你不会再有这个问题了跨度>
标签: python numpy machine-learning keras tf.keras