import numpy as np
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
import matplotlib.pyplot as plt
其中np.random.rand是生成[0, 1]的数据。np.random.randn是标准正态分布(均值是0,方差是1)。np.random.normal是生成正态分布数据,第一个参数是均值,第二个参数是方差。
x = np.random.rand(100)
noise = np.random.normal(0, 0.01, size = x.shape)
y = 0.1 * x + 0.2 + noise
plt.scatter(x, y)
这里的构建模型指的是两步:首先构建模型,然后设置优化器、损失函数和度量标准。其中第一个网络层需要指定输入维度,一般使用input_shape,可通过input_dim进行简写。
model = Sequential()
model.add(Dense(units = 1, input_dim = 1))
model.compile(optimizer = 'sgd', loss = 'mse') #这里如果metrics中添加了mse,在训练模型返回参数的时候就会变成一个list,也就是loss和metrics。
这种写法其实有点小问题,因为每个batch的数据是全部数据了。
for step in range(5000):
loss = model.train_on_batch(x, y)
if step % 100 == 0:
print('loss is', loss)
y_pred = model.predict(x)
plt.scatter(x, y)
plt.plot(x, y_pred)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Activation
x = np.linspace(-0.5, 0.5, 201)
y = np.square(x) + np.random.normal(0, 0.01, size = x.shape)
plt.scatter(x, y)
若干个个问题:
model = Sequential()
model.add(Dense(units=10, input_dim=1))
model.add(Activation('tanh'))
model.add(Dense(units=1))
model.compile(optimizer = tf.keras.optimizers.SGD(lr=0.3), loss = 'mse')
for epoch in range(1000):
model.fit(x, y, batch_size = 64)
y_pred = model.predict(x)
plt.scatter(x, y)
plt.plot(x, y_pred, color = 'r' )
plt.show()