神经网络插值

interpolation with neural networks

提问人:Josue Oliva 提问时间:11/10/2023 更新时间:11/10/2023 访问量:66

问:

假设你有这个数据集:

       1.05   1.10   1.15   1.20   1.25  
0.2   0.000  0.000  0.000  0.000  0.000  
0.3   0.350  0.350  0.350  0.350  0.350  
0.4   0.615  0.619  0.623  0.626  0.628  
0.5   0.805  0.816  0.826  0.834  0.839

有没有办法使用神经网络进行插值,例如 0.389 和 1.168,而不仅仅是使用简单的插值或双线性插值?

神经网络 插值

评论


答:

0赞 Sash Sinha 11/10/2023 #1

您可以使用 tf.keras。顺序

import os
import random
import numpy as np
import tensorflow as tf

# Set all random seeds for reproducibility on the same machine at least
RANDOM_SEED = 1
os.environ['PYTHONHASHSEED'] = str(RANDOM_SEED)
random.seed(RANDOM_SEED)
np.random.seed(RANDOM_SEED)
tf.random.set_seed(RANDOM_SEED)

# Data
x1 = np.array([1.05, 1.10, 1.15, 1.20, 1.25])
x2 = np.array([0.2, 0.3, 0.4, 0.5])
y = np.array([[0.000, 0.000, 0.000, 0.000, 0.000],
              [0.350, 0.350, 0.350, 0.350, 0.350],
              [0.615, 0.619, 0.623, 0.626, 0.628],
              [0.805, 0.816, 0.826, 0.834, 0.839]])
X1_mesh, X2_mesh = np.meshgrid(x1, x2)
X = np.column_stack((X1_mesh.ravel(), X2_mesh.ravel()))
Y = y.ravel()

# Model
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(64, input_dim=2, activation='relu'))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='linear'))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X, Y, epochs=1000, verbose=0)

# Predict
new_point = np.array([[1.168, 0.389]])
predicted_value = model.predict(new_point)
print(predicted_value)

输出示例:

1/1 [==============================] - 0s 55ms/step
[[0.5972232]]

评论

0赞 Josue Oliva 11/10/2023
我有一个问题,如果你只想插值 0.2 和 1.168 怎么办?我刚刚在谷歌合作中测试了它,结果是否定的,这是为什么?
0赞 Sash Sinha 11/10/2023
在边界处,模型的性能可能更差。
0赞 Josue Oliva 11/10/2023
是的,你是对的,因为零会弹出,但如果你插值 0.3 怎么办?
0赞 Sash Sinha 11/10/2023
每个 0.2 的示例都是 0.000?
0赞 Josue Oliva 11/10/2023
你是对的,我没有注意到那部分,非常感谢你的回答,顺便说一句,我在 tensorflow 上遇到了问题,我的意思是安装它,你能帮帮我吗?我试过几次,但没有成功。