gpt4 book ai didi

python - 无法让 tensorflow 建立一个甚至可以匹配非常简单的线性图的模型

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:00 24 4
gpt4 key购买 nike

我似乎无法让 tensorflow 构建一个与最简单的线性图相匹配的模型。下面是代码和实际与模型结果。我究竟做错了什么?

import numpy as np
import matplotlib.pyplot as plt
import keras

x = np.array([[1965.0], [1980.0]])
y = np.array([[320.0], [345.0]])

plt.plot(x, y)
model = keras.Sequential([keras.layers.Dense(1, activation='linear')])
model.compile(optimizer='adam',
loss="mean_squared_error")
model.fit(x=x, y=y, epochs=10000)


yHat = model.predict(x)
print("yHat ", yHat)
plt.plot(x, yHat)
plt.show()

Results

最佳答案

您走在正确的轨道上,只是在规范化数据和构建模型时遗漏了一些关键点。

  1. 只有 2 个数据点被输入您的神经网络。使用 np.arange() 来创建更大的数组。

  2. 神经网络喜欢 0 到 1 之间的数据点(有助于学习收敛)。因此,让我们使用 sklearn.MinMaxScaler 转换 x 和 y 数组:
    (这会将每个变量根据其值转换为 0 和 1 之间的数组的最小值和最大值)

from sklearn.preprocessing import MinMaxScaler  
scaler = MinMaxScaler()
x = scaler.fit_transform(np.arange(1965, 1990).reshape(-1,1))
y = scaler.fit_transform(np.arange(320, 345).reshape(-1,1))

(注意:我们正在 reshape x,y 以适应 (1,0) numpy 数组)

  1. 然后我们可以使用 1 个线性 Dense 层构建模型:
epochs = 20
model = keras.Sequential()
model.add(Dense( units=1, input_dim=1, activation="linear" ))

## Establishing optimizer so that we can modify the learning rate >= 1
sgd = keras.optimizers.SGD(lr=0.1, momentum=0.0, decay=0.0, nesterov=False)
model.compile( optimizer=sgd, loss="mean_squared_error" )
model.fit( x, y, batch_size=1, epochs=epochs)
  1. 最后我们可以绘制预测和实际 Y 变量:
predicted = model.predict(x)
predicted = predicted + .01 ## offset prediction so the two lines don't overlap

plt.plot(scaler.inverse_transform(y), label='actual_y')
plt.plot(scaler.inverse_transform(predicted), label='predicted_y')
plt.legend(loc='upper left')
plt.show()

(注意:我们正在反转 sklearn.tranform 以显示实际数据而不是缩放版本)

最终代码:

import numpy as np
import matplotlib.pyplot as plt
import keras
from keras.layers.core import Dense

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

epochs = 20

## Using np.arange() instead of np.array()
## Transforming x,y so that the model can understand the variables
x = scaler.fit_transform(np.arange(1965, 1990).reshape(-1,1))
y = scaler.fit_transform(np.arange(320, 345).reshape(-1,1))

model = keras.Sequential()
model.add(Dense( units=1, input_dim=1, activation="linear" ))

## Establishing optimizer so that we can modify the learning rate >= 1
sgd = keras.optimizers.SGD(lr=0.1, momentum=0.0, decay=0.0, nesterov=False)
model.compile( optimizer=sgd, loss="mean_squared_error" )
model.fit( x, y, batch_size=1, epochs=epochs)

predicted = model.predict(x)
predicted = predicted + .01 ## offset prediction so the two lines don't overlap

plt.plot(scaler.inverse_transform(y), label='actual_y')
plt.plot(scaler.inverse_transform(predicted), label='predicted_y')
plt.legend(loc='upper left')
plt.show()

关于python - 无法让 tensorflow 建立一个甚至可以匹配非常简单的线性图的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55995071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com