我一直在研究使用CNN模型解决Poisson问题(如果你不熟悉可以忽略Poisson问题部分并跳到图像处理/CNN部分)。更具体地说,我正在通过 CNN 算法解决电势问题 Φ (phi),粒子分布 ρ (rho) 作为笛卡尔坐标系中的输入,类似于 this,但没有介电常数。
训练输入 ρ (rho) 是 20x20 像素矩阵,数据标签 Φ (phi) 也是 20x20 矩阵。输入和标签都包含 5000 个矩阵(5000、20、20、1)。 input-label数据集是通过Gauss-Seidel方法得到的。
目标是用CNN模型从输入数据粒子分布ρ(rho)中得到电势Φ(phi)
对于这个回归案例,如何使用最好的 CNN 架构?
我试过使用带有 Tensorflow 的 CNN 架构的简单算法,没有最大池化层(以保持准确性)并在输出层使用线性激活函数\
x_train = x_train.reshape(1000, 20, 20, 1)
y_train = x_train.reshape(1000, 20, 20, 1)
x_test = x_test.reshape(1000, 20, 20, 1)
y_test = y_test.reshape(1000, 20, 20, 1)
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(20,20,1)),
Conv2D(64, (5,5), activation='relu'),
Conv2D(64, (3,3), activation='relu'),
Flatten(),
Dense(64, activation='relu'),
Dense(1, activation='relu')
])
model.summary()
model.compile(loss = 'mse', optimizer = 'adam')
model.summary()
model.fit(x_train, y_train, epochs=10)
并返回错误:
InvalidArgumentError: Graph execution error:
Detected at node 'gradient_tape/mean_squared_error/BroadcastGradientArgs' defined at (most recent call last):
File "", line 198, in _run_module_as_main
...
File "c:\Users\acer\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\optimizers\optimizer.py", line 275, in compute_gradients
grads = tape.gradient(loss, var_list)
Node: 'gradient_tape/mean_squared_error/BroadcastGradientArgs'
Incompatible shapes: [32,1] vs. [32,20,20,1]
[[{{node gradient_tape/mean_squared_error/BroadcastGradientArgs}}]] [Op:__inference_train_function_19666]