import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
data = np.random.uniform(size=(64 * 1025, 1), low=-5., high=5.)
x_train = data[:64*1000, :]
x_test = data[64*1000:, :]
y_train = np.sin(x_train) #+ np.random.normal(size=x_train.shape) / 10.
y_test = np.sin(x_test)
plt.plot(x_train, y_train, '.')
plt.plot(x_test, y_test, '.')
plt.legend(["train", "test"])
<matplotlib.legend.Legend at 0x7fc66a0a6320>
model = keras.Sequential(
[
keras.Input(1, name="input_layer"),
keras.layers.Dense(32, activation=tf.nn.relu, name="hidden_layer_1"),
keras.layers.Dense(32, activation=tf.nn.relu, name="hidden_layer_2"),
#keras.layers.Dense(4, activation=tf.nn.relu, name="hidden_layer_3"),
#keras.layers.Dense(4, activation=tf.nn.relu, name="hidden_layer_4"),
keras.layers.Dense(1, name="output_layer")
]
)
model.compile(
optimizer=keras.optimizers.Adam(learning_rate=0.001),
loss=keras.losses.MeanSquaredError(),
metrics=[keras.metrics.RootMeanSquaredError()]
)
logdir = "log/toy_example"
tensorboard_callback = keras.callbacks.TensorBoard(logdir)
model.fit(
x_train,
y_train,
batch_size=64,
epochs=10,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback]
)
Epoch 1/10 1000/1000 [==============================] - 1s 1ms/step - loss: 1.0507 - root_mean_squared_error: 1.0107 - val_loss: 0.4452 - val_root_mean_squared_error: 0.6672 Epoch 2/10 1000/1000 [==============================] - 1s 996us/step - loss: 0.4354 - root_mean_squared_error: 0.6599 - val_loss: 0.4211 - val_root_mean_squared_error: 0.6489 Epoch 3/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.4142 - root_mean_squared_error: 0.6436 - val_loss: 0.4068 - val_root_mean_squared_error: 0.6378 Epoch 4/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.4039 - root_mean_squared_error: 0.6355 - val_loss: 0.4029 - val_root_mean_squared_error: 0.6348 Epoch 5/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.3972 - root_mean_squared_error: 0.6302 - val_loss: 0.4025 - val_root_mean_squared_error: 0.6344 Epoch 6/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.3979 - root_mean_squared_error: 0.6308 - val_loss: 0.4026 - val_root_mean_squared_error: 0.6345 Epoch 7/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.3982 - root_mean_squared_error: 0.6310 - val_loss: 0.4028 - val_root_mean_squared_error: 0.6347 Epoch 8/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.3997 - root_mean_squared_error: 0.6322 - val_loss: 0.4025 - val_root_mean_squared_error: 0.6344 Epoch 9/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.3994 - root_mean_squared_error: 0.6320 - val_loss: 0.4025 - val_root_mean_squared_error: 0.6344 Epoch 10/10 1000/1000 [==============================] - 1s 1ms/step - loss: 0.4017 - root_mean_squared_error: 0.6338 - val_loss: 0.4025 - val_root_mean_squared_error: 0.6344
<tensorflow.python.keras.callbacks.History at 0x7fc669dfd438>
x = np.linspace(-10., 10., 100)
plt.plot(x, np.sin(x))
print(x.shape)
x = np.reshape(x, (-1, 1))
print(x.shape)
plt.plot(x, model(x))
plt.legend(["sin", "model"])
(100,) (100, 1)
<matplotlib.legend.Legend at 0x7fc669d30ba8>
model.summary()
keras.utils.plot_model(model, "model.png", show_shapes=True)
Model: "sequential_20" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= hidden_layer_1 (Dense) (None, 3) 6 _________________________________________________________________ hidden_layer_2 (Dense) (None, 3) 12 _________________________________________________________________ output_layer (Dense) (None, 1) 4 ================================================================= Total params: 22 Trainable params: 22 Non-trainable params: 0 _________________________________________________________________
# %load_ext tensorboard
# %tensorboard --logdir log
model.save("model/toy_model")
model2 = keras.models.load_model("model/toy_model")
INFO:tensorflow:Assets written to: model/toy_model/assets