如何解决您正在尝试将包含 36 层的权重文件加载到具有 19 层的模型中
import numpy as np
import keras
from keras.models import Model
from keras.layers import Input,Conv2D,MaxPooling2D,UpSampling2D,concatenate,Cropping2D,ZeroPadding2D,Conv2DTranspose
from keras.optimizers import Adam
from keras.callbacks import ModelCheckpoint,LearningRateScheduler,TensorBoard
from keras import backend as K
import os
from skimage.transform import resize
from skimage.io import imsave
K.set_image_data_format('channels_first') # Theano dimension ordering in this code
working_path = '../luna/output/'
main_path = '../luna/'
unet_weight = '../luna/unet.hdf5'
BATCH_SIZE=8
EPOCHS=60
img_rows = 512
img_cols = 512
smooth = 1.
def dice_coef(y_true,y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
def dice_coef_np(y_true,y_pred):
y_true_f = y_true.flatten()
y_pred_f = y_pred.flatten()
intersection = np.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (np.sum(y_true_f) + np.sum(y_pred_f) + smooth)
def dice_coef_loss(y_true,y_pred):
return 1 - dice_coef(y_true,y_pred)
def get_model():
inputs = Input((1,img_rows,img_cols))
conv1 = Conv2D(32,(3,3),activation='relu',padding='same')(inputs)
conv1 = Conv2D(32,padding='same')(conv1)
pool1 = MaxPooling2D(pool_size=(2,2))(conv1)
conv2 = Conv2D(64,padding='same')(pool1)
conv2 = Conv2D(64,padding='same')(conv2)
pool2 = MaxPooling2D(pool_size=(2,2))(conv2)
conv3 = Conv2D(128,padding='same')(pool2)
conv3 = Conv2D(128,padding='same')(conv3)
pool3 = MaxPooling2D(pool_size=(2,2))(conv3)
conv4 = Conv2D(256,padding='same')(pool3)
conv4 = Conv2D(256,padding='same')(conv4)
pool4 = MaxPooling2D(pool_size=(2,2))(conv4)
conv5 = Conv2D(512,padding='same')(pool4)
conv5 = Conv2D(512,padding='same')(conv5)
up6 = concatenate([UpSampling2D(size=(2,2))(conv5),conv4],axis=1)
conv6 = Conv2D(256,padding='same')(up6)
conv6 = Conv2D(256,padding='same')(conv6)
up7 = concatenate([UpSampling2D(size=(2,2))(conv6),conv3],axis=1)
conv7 = Conv2D(128,padding='same')(up7)
conv7 = Conv2D(128,padding='same')(conv7)
up8 = concatenate([UpSampling2D(size=(2,2))(conv7),conv2],axis=1)
conv8 = Conv2D(64,padding='same')(up8)
conv8 = Conv2D(64,padding='same')(conv8)
up9 = concatenate([UpSampling2D(size=(2,2))(conv8),conv1],axis=1)
conv9 = Conv2D(32,padding='same')(up9)
conv9 = Conv2D(32,padding='same')(conv9)
conv10 = Conv2D(1,(1,1),activation='sigmoid')(conv9)
model = Model(inputs=inputs,outputs=conv10)
print (model.summary())
# model.compile(optimizer=Adam(lr=1.0e-5),loss=dice_coef_loss,metrics=[dice_coef])
model.compile(optimizer=Adam(lr=1e-5),loss='binary_crossentropy',metrics = ['accuracy'])
return model
def get_unet():
K.set_image_data_format('channels_first') # Theano dimension ordering in this code
inputs = Input((1,padding='same')(conv5)
up6 = concatenate([Conv2DTranspose(256,(2,2),strides=(2,padding='same')(conv5),padding='same')(conv6)
up7 = concatenate([Conv2DTranspose(128,padding='same')(conv6),padding='same')(conv7)
up8 = concatenate([Conv2DTranspose(64,padding='same')(conv7),padding='same')(conv8)
up9 = concatenate([Conv2DTranspose(32,padding='same')(conv8),padding='same')(conv9)
conv10 = Conv2D(1,activation='sigmoid')(conv9)
model = Model(inputs=[inputs],outputs=[conv10])
print (model.summary())
model.compile(optimizer=Adam(lr=1e-5),metrics=[dice_coef])
return model
def get_unet():
K.set_image_data_format('channels_first') # Theano dimension ordering in this code
inputs = Input((1,metrics=[dice_coef])
return model
def train_and_predict(use_existing):
print('-' * 30)
print('Loading and preprocessing train data...')
print ('BATCH_SIZE : {}'.format(BATCH_SIZE))
print ('EPOCHS : {}'.format(EPOCHS))
imgs_train = np.load(main_path + "trainImages.npy").astype(np.float32)
imgs_mask_train = np.load(main_path + "trainMasks.npy").astype(np.float32)
imgs_test = np.load(main_path + "testImages.npy").astype(np.float32)
imgs_mask_test_true = np.load(main_path + "testMasks.npy").astype(np.float32)
mean = np.mean(imgs_train) # mean for data centering
std = np.std(imgs_train) # std for data normalization
imgs_train -= mean # images should already be standardized,but just in case
imgs_train /= std
print('-' * 30)
print('Creating and compiling model...')
model = get_model()
# Saving weights to unet.hdf5 at checkpoints
best_weight_path = '/root/sharedfolder/luna16/model/best_unet_upsampling.hdf5'
model_checkpoint = ModelCheckpoint(best_weight_path,monitor='val_loss',save_best_only=True)
tb = TensorBoard(log_dir="../logs_281118",batch_size=BATCH_SIZE)
best_weight_path = '../model/best_unet_upsampling_{}.hdf5'.format(BATCH_SIZE)
model_checkpoint = ModelCheckpoint(best_weight_path,save_best_only=True)
tb = TensorBoard(log_dir="../logs_upsampling",batch_size=BATCH_SIZE)
# Set argument for call to train_and_predict to true at end of script
if use_existing:
print('loading weights...')
model.load_weights(unet_weight)
print('-' * 30)
print('Fitting model...')
model.fit(imgs_train,imgs_mask_train,validation_split=0.15,batch_size=BATCH_SIZE,epochs=EPOCHS,verbose=1,shuffle=True,callbacks=[model_checkpoint,tb])
# loading best weights from training session
print('-' * 30)
print('Loading saved weights...')
model.load_weights(unet_weight)
model.load_weights(best_weight_path)
print('-' * 30)
print('Predicting masks on test data...')
num_test = len(imgs_test)
imgs_mask_test = np.ndarray([num_test,1,512,512],dtype=np.float32)
for i in range(num_test):
imgs_mask_test[i] = model.predict([imgs_test[i:i + 1]],verbose=0)[0]
np.save('../masksTestPredictedAll.npy',imgs_mask_test)
np.save('../masks_mask_test.npy',imgs_mask_test)
print('-' * 30)
print('Calculate mean dice coeff...')
mean = 0.0
for i in range(num_test):
mean += dice_coef_np(imgs_mask_test_true[i,0],imgs_mask_test[i,0])
mean /= num_test
# print("Mean Dice Coeff : ",mean)
if __name__ == '__main__':
train_and_predict(True)
我正在尝试从 GitHub 实施一个项目,但在运行后显示错误
You are trying to load a weight file containing 36 layers into a model with 19 layers
如何解决这个错误? 有些地方他们建议在输入层中放置“输入形状”,但它也显示错误。再次有一些建议是使用 keras version==2.00 。这也不能解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。