gpt4 book ai didi

python - CNN 与 keras 预测能量

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:47 25 4
gpt4 key购买 nike

我是机器学习和 keras 库的新手,我制作了一个用于回归的 CNN 代码,如下所示。

%matplotlib inline
from __future__ import division
import numpy as np
from numpy.random import rand
import matplotlib.pyplot as plt


def initial_spin_state(N):
state = np.random.choice((0.11111, 0.99999), (N, N))
return state


def metropolis_algorithm(config, beta):

N = len(config)

for i in range(N):
for j in range(N):

a = np.random.randint(0, N)
b = np.random.randint(0, N)
s = config[a, b]
near=config[(a+1)%N,b] + config[a,(b+1)%N] + config[(a-1)%N,b] + config[a,(b-1)%N]

delta = 2 * s *near
if delta < 0:
s *= -1
elif rand() < np.exp(-delta * beta):
s *= -1
config[a, b] = s

return config

def get_energy(config):
energy = 0
N = len(config)
for i in range(N):
for j in range(N):
S = config[i, j]
near = config[(i+1)%N, j] + config[i,(j+1)%N] + config[(i-1)%N, j] + config[i,(j-1)%N]
energy += near*S

return energy


x_train = []
y_train = []
for i in range(50000):

config = initial_spin_state(16)
energy = get_energy(config)

x_train.append(config)
y_train.append(energy)

x_train = np.array(x_train)
y_train = np.array(y_train)

print(x_train.shape)
print(y_train.shape)


x_test = []
y_test = []
for j in range(20000):

config = initial_spin_state(16)
energy = get_energy(config)

x_test.append(config)
y_test.append(energy)

x_test = np.array(x_test)
y_test = np.array(y_test)

print(x_test.shape)
print(y_test.shape)


x_train = x_train.reshape(50000, 16, 16, 1)
x_test = x_test.reshape(20000, 16, 16, 1)
print(x_train.shape)
print(x_test.shape)

import numpy as np
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from keras.optimizers import Adadelta
from keras.regularizers import l2


model = Sequential()
model.add(Conv2D(32, (2, 2), input_shape = (16, 16, 1), activation = 'relu'))
model.add(MaxPooling2D(2,2))


model.add(Conv2D(16, (2, 2), activation = 'relu'))
model.add(MaxPooling2D(2,2))

model.add(Flatten())
model.add(Dense(512, activation = 'relu'))
#model.add(Dense(1024, activation = 'relu'))
model.add(Dense(1))

np.random.seed(0)
model.summary()
model.compile(loss = "mse", metrics = ['accuracy'], optimizer = 'adam')



%%time
hist = model.fit(x_train, y_train, epochs = 200, batch_size = 500,
validation_data = (x_test, y_test), verbose = 2)


import matplotlib.pyplot as plt
plt.plot(hist.history['acc'], '_b', label = "training")
plt.plot(hist.history['val_acc'], 'r:', label = "test")
plt.legend()
plt.grid("on")
plt.show()


此代码用于图像输入,以及连续能量值输出。

因此,如果我将图像(正在配置)放入 CNN,它应该预测该配置的能量。

问题是..

当我训练 CNN 时,训练损失和验证损失下降得非常缓慢。

当然,训练精度和验证精度的提高非常缓慢。

并且,有时仅提高了训练准确度,而没有提高验证准确度。

天才们..我的代码出了什么问题?

请教我

最佳答案

首先,由于您正在做回归问题,我认为使用 acc 作为指标不是一个好主意,相反,您可能会考虑使用平均绝对误差mae 作为你的矩阵。

您使用的损失是mse(平均平方误差),因此该值会非常大,特别是当您没有标准化y值。但是,在运行您提供的代码约 25 个周期后,验证损失 降至 290.xx,其中 13.xxmae (而且它还没有收敛)。我尝试使用你的模型来预测一些验证数据,它工作得很好。也许您应该在认为出现问题之前测试您的模型。

关于python - CNN 与 keras 预测能量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57705470/

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