Keras 神经网络(反向传播)的输入是否正确执行?

Keras 神经网络(反向传播)的输入是否正确执行?,keras,neural-network,backpropagation,Keras,Neural Network,Backpropagation,我目前正在尝试建立一个网络来学习预测单位圆(向量到点的长度

我目前正在尝试建立一个网络来学习预测单位圆(向量到点的长度<1,如a)。 我不确定输入是否正确(即使“预期”图是正确的),因为当完成训练时,我会感到奇怪

网络: 2输入(x,y) 4隐藏的 1输出(灰度值)

参见以下代码,例如keras:

import math
import matplotlib.pyplot as plt
import numpy
from keras.models import Sequential
from keras.layers import Dense

#init values
a = 100 #diagramsize/2
X = numpy.zeros(((2*a+1)**2,2))
y = numpy.zeros(((2*a+1)**2))

########################################creation of circle data
n=0
for i in range(-a,a+1):
    for j in range(-a,a+1):

        X[n] = [2*i/a,2*j/a]
        out = ((((2*i/a)**2)+((2*j/a)**2))**0.5)
        if out < 1:
            y[n] = 1
        else:
            y[n] = 0
        n += 1
###################################################

#creating plotable data            
test_img = [[0 for col in range(2*a+1)] for row in range(2*a+1)] 
for i in range(len(X)):
    test_img[int((X[i][0]*a/2+a))][int((X[i][1]*a/2+a))] = y[i]

#plot data 
#creates "white circle"     
plt.imshow(test_img, cmap='gray')
plt.show(block = False)
plt.pause(0.001) #show true values

# define the keras model
model = Sequential()
model.add(Dense(4, input_dim=2, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# fit the keras model on the dataset
model.fit(X, y, epochs=100, batch_size=2000) #batch big, else error occurs

#predict values
tested = model.predict(X)

#for contrast
tested[0][0] = 1
tested[1][0] = 0

#create new image from data
for i in range(len(X)):
    test_img[int((X[i][0]*a/2+a))][int((X[i][1]*+a))] = tested[i][0]

#plot new image        
plt.imshow(test_img, cmap='gray')
plt.show(block = False)
plt.pause(0.001) #show true values
导入数学
将matplotlib.pyplot作为plt导入
进口numpy
从keras.models导入顺序
从keras.layers导入稠密
#初始值
a=100图尺寸/2
X=numpy.zero(((2*a+1)**2,2))
y=numpy.zero(((2*a+1)**2))
########################################创建圆数据
n=0
对于范围(-a,a+1)内的i:
对于范围(-a,a+1)内的j:
X[n]=[2*i/a,2*j/a]
输出=(((2*i/a)**2)+((2*j/a)**2))**0.5)
如果输出<1:
y[n]=1
其他:
y[n]=0
n+=1
###################################################
#创建可绘制数据
test_img=[[0表示范围(2*a+1)中的列](2*a+1)中的行]
对于范围内的i(len(X)):
测试[int((X[i][0]*a/2+a))][int((X[i][1]*a/2+a))]=y[i]
#绘图数据
#创建“白圈”
plt.imshow(test_img,cmap='gray')
plt.show(块=假)
plt.暂停(0.001)#显示真实值
#定义keras模型
模型=顺序()
添加(密集型(4,输入尺寸=2,激活=sigmoid'))
model.add(密集型(1,激活='sigmoid'))
#编译keras模型
compile(loss='binary\u crossentropy',optimizer='adam',metrics=['accurity'])
#在数据集上拟合keras模型
model.fit(X,y,epochs=100,batch_size=2000)#batch big,否则发生错误
#预测值
测试=模型。预测(X)
#对比
测试[0][0]=1
测试[1][0]=0
#从数据创建新图像
对于范围内的i(len(X)):
测试[int((X[i][0]*a/2+a))][int((X[i][1]*+a))]=tested[i][0]
#绘制新图像
plt.imshow(test_img,cmap='gray')
plt.show(块=假)
plt.暂停(0.001)#显示真实值