我正在运行一种回归类型的CNN,该CNN基于样本和相应标签的数据集输入和输出不同尺寸的图像(而不是图像分割问题)。结果,我网络的最后一个密集层将标签的高度和宽度相乘。现在,我已经培训网络一段时间了,我想查看图像的外观,以便了解我的模型的好坏。是否有为我提供此选项的功能,或者我必须对其进行硬编码?我该怎么做? 下面是我的网络代码和网络摘要。
conv2d_1(Conv2D)(无,54,1755,4)20
activation_1(激活)(无,54,1,1755,4)0
max_pooling2d_1(MaxPooling2(None,18,585,4)0
batch_normalization_1(批次(无,18、585、4)16
conv2d_2(Conv2D)(无,17,584,8)136
activation_2(激活)(无,17、584、8)0
max_pooling2d_2(MaxPooling2(None,8,292,8)0
batch_normalization_2(批次(无,8、292、8)32
conv2d_3(Conv2D)(无,7,291,16)528
activation_3(激活)(无,7、291、16)0
max_pooling2d_3(MaxPooling2(None,3,145,16)0
batch_normalization_3(批次(无,3、145、16)64
conv2d_4(Conv2D)(无,2,144,32)2080
activation_4(激活)(无,2、144、32)0
max_pooling2d_4(MaxPooling2(None,1,72,32)0
batch_normalization_4(批次(无,1、72、32)128
flatten_1(平坦)(无,2304)0
dropout_1(退出)(无,2304)0
dense_1(Dense)(None,19316)44523380
activation_5(激活)(无,19316年)0
================================================ ==================
总参数:44,526,384 可训练的参数:44,526,264 不可训练的参数:120
谢谢!
def generator(data_arr, batch_size = 10):
num = len(data_arr)
num = int(num/batch_size)
# Loop forever so the generator never terminates
while True:
for offset in range(0, num):
batch_samples = (data_arr[offset*batch_size:(offset+1)*batch_size])
samples = []
labels = []
for batch_sample in batch_samples:
samples.append(batch_sample[0])
labels.append((np.array(batch_sample[1].flatten())).transpose())
X_ = np.array(samples)
Y_ = np.array(labels)
X_ = X_[:, :, :, newaxis]
yield (X_, Y_)
# compile and train the model using the generator function
train_generator = generator(training_data, batch_size = 10)
validation_generator = generator(val_data, batch_size = 10)
model = Sequential()
model.add(Conv2D(4, (2, 2), input_shape = (55, 1756, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (3, 3)))
model.add(BatchNormalization())
model.add(Conv2D(8, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(BatchNormalization())
model.add(Conv2D(16, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(BatchNormalization())
model.add(Conv2D(32, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dropout(0.3))
model.add(Dense(19316))
model.add(Activation('softmax'))
def nrmse(y_true, y_pred):
return backend.sqrt(backend.mean(backend.square(y_pred -
y_true)))/(2)
def rmse(y_true, y_pred):
return backend.sqrt(backend.mean(backend.square(y_pred - y_true),
axis=-1))
model.compile(loss = 'mean_squared_error',
optimizer = 'adam',
metrics = [rmse, nrmse])
model.summary()
答案 0 :(得分:1)
据我了解,模型的输出应表示尺寸为(11,1756)的图像像素的灰度值。
无需对特殊功能进行硬编码,只需在模型的输出上使用标准reshape()函数即可。
images = y_pred.reshape((-1, 11, 1756))
在创建矢量时,您可能已经在这样做了 训练期间使用的y_true参数(我认为 地面真理y_true变量的形状最初是(11, 1756),然后将其重塑为单列矢量形式)。