我试图在Keras中建立一个神经网络,但是这样做遇到了一个问题:网络的输出大小与我想要的输出不同,后者是一个整数。 我尝试通过添加一个将“ units”参数设置为1的Dense层来执行此操作。但是,由于输入数据的额外维度,我仍然最终得到形状为(None,13、8、1)的输出
import numpy
from keras.layers import Conv2D, Input, Dense
from keras.models import Model
from keras.optimizers import SGD
def make_training_data():
input_training_data = []
for i in range(6):
a = []
for j in range(13):
b = []
for k in range(8):
c = []
for l in range(8):
c.append(0)
b.append(c)
a.append(b)
input_training_data.append(a)
output_training_data = []
for i in range(6):
output_training_data.append(0)
return input_training_data, output_training_data
def make_neural_net():
input = Input((13, 8, 8))
output = Conv2D(256, (3, 3), input_shape=(13, 8, 8), padding='same')(input)
output = Dense(1)(output)
return Model(outputs=output, inputs=input)
def main():
input_training_data, output_training_data = make_training_data()
neural_net = make_neural_net()
input_training_data = numpy.array(input_training_data)
output_training_data = numpy.array(output_training_data)
sgd = SGD(0.2, 0.9)
neural_net.compile(sgd, 'categorical_crossentropy', metrics=['accuracy'])
neural_net.fit(input_training_data, output_training_data, epochs=1)
main()
如何更改网络,以便获得正确的输出大小?
答案 0 :(得分:3)
在将卷积层转换为一维张量之前,需要展平张量。
替换:
output = Dense(1)(output)
具有:
output = Flatten()(output)
output = Dense(1)(output)`
从keras.layers.Flatten
导入
此外,由于您有1个输出神经元,因此您需要将激活功能更改为'sparse_categorical_crossentropy'