我相信这是我的第一个问题。
我对神经网络非常陌生。我刚刚开始使用Python进行一项研究,该研究旨在查看患有糖尿病的患者的血糖水平,并将其患病的风险从1降到3。其中1个为高风险,3个为低风险。
现在,我以前有约110张由医生排名的图表(42个风险1、51个风险2、10个风险3)。我随机将每组的25%作为测试集,其余的作为训练,然后将其交给Keras进行学习。
效果很好。这是我的代码:
print("Convoluting")
classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))
print("Pooling")
classifier.add(MaxPooling2D(pool_size = (2,2)))
print("Flattening")
classifier.add(Flatten())
print("Connecting")
classifier.add(Dense(activation = 'relu', units=128))
classifier.add(Dense(activation = 'softmax', units=3))
print("Compiling CNN")
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
print("Generating images")
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator()
test_datagen = ImageDataGenerator()
print("Setting sets")
training_set = train_datagen.flow_from_directory(
'dataset/train_set',
target_size=(64,64),
batch_size=Batches,
class_mode='categorical')
test_set = test_datagen.flow_from_directory(
'dataset/test_set',
target_size=(64,64),
batch_size=Batches,
class_mode='categorical')
print("training nn...")
from IPython.display import display
from PIL import Image
classifier.fit_generator(
training_set,
steps_per_epoch=StepsPerEpoch,
epochs=Epochs,
validation_data=test_set,
validation_steps=ValidationSteps)
但是,训练后的准确性不会超过0.4。现在,我知道我有一个训练神经网络的样本相对较小,但是我目前无法获得更多患者的信息。但是,我确实可以访问这些患者的人口统计数据,例如体重,身高和年龄。
基本上,我想以某种方式包括每位患者的体重,身高和年龄以及显示他们的葡萄糖水平的图表。因此,我的程序知道做出判断时会考虑这些信息。
在网上搜索时,我找不到类似的东西,尽管这可能是由于我对此事的了解不足。我该怎么办?
感谢您的时间。
答案 0 :(得分:1)
如果我必须做类似的事情,我将图像特征和数字特征以相同的形式(特征向量)连接起来。为此,您可以将网络的卷积部分视为特征提取器,该提取器将在最后一个池化层之后变成一系列特征,即它将具有类似[batch_size,1,1,N]的形状。此时,您可以轻松地将常规数字特征附加/连接起来,然后再将其输入到密集层中。
耦合我正在寻找的东西:
您可以从Wide & Deep Learning for Recommender Systems获得更多启发。
答案 1 :(得分:0)
首先,您使用小型深度网络,因此您的数据必须超过100个实例。因此,我建议搜索“数据增强”以了解如何增加数据。其次,尽管您缺乏用于训练网络的数据,但我认为测试数据的10%或更少就足够了。最后,为了使用其他特征进行训练,您可以通过卷积网络提取图像的特征,然后将其与其他特征连接起来,并训练一个更简单的网络进行最终分类。