python - Tensowflow 2.1 给出错误[Tensor 对象没有属性'is_initialized']
问题描述
我正在使用 tensorflow 2.1,我也有一些自定义函数。具有所有功能的相同模型在 tf 2.4 上运行顺利,但不知何故在 tf 2.1 上运行
模型:
def get_small_unet(n_filters = 16, bn = True, dilation_rate = 1):
'''Validation Image data generator
Inputs:
n_filters - base convolution filters
bn - flag to set batch normalization
dilation_rate - convolution dilation rate
Output: Unet keras Model
'''
#Define input batch shape
batch_shape=(256,256,3)
inputs = Input(batch_shape=(128, 256, 256, 3))
print(inputs)
conv1 = Conv2D(n_filters * 1, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(inputs)
if bn:
conv1 = BatchNormalization()(conv1)
conv1 = Conv2D(n_filters * 1, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv1)
if bn:
conv1 = BatchNormalization()(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last')(conv1)
conv2 = Conv2D(n_filters * 2, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(pool1)
if bn:
conv2 = BatchNormalization()(conv2)
conv2 = Conv2D(n_filters * 2, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv2)
if bn:
conv2 = BatchNormalization()(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last')(conv2)
conv3 = Conv2D(n_filters * 4, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(pool2)
if bn:
conv3 = BatchNormalization()(conv3)
conv3 = Conv2D(n_filters * 4, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv3)
if bn:
conv3 = BatchNormalization()(conv3)
pool3 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last')(conv3)
conv4 = Conv2D(n_filters * 8, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(pool3)
if bn:
conv4 = BatchNormalization()(conv4)
conv4 = Conv2D(n_filters * 8, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv4)
if bn:
conv4 = BatchNormalization()(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last')(conv4)
conv5 = Conv2D(n_filters * 16, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(pool4)
if bn:
conv5 = BatchNormalization()(conv5)
conv5 = Conv2D(n_filters * 16, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv5)
if bn:
conv5 = BatchNormalization()(conv5)
up6 = concatenate([UpSampling2D(size=(2, 2))(conv5), conv4], axis=3)
conv6 = Conv2D(n_filters * 8, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(up6)
if bn:
conv6 = BatchNormalization()(conv6)
conv6 = Conv2D(n_filters * 8, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv6)
if bn:
conv6 = BatchNormalization()(conv6)
up7 = concatenate([UpSampling2D(size=(2, 2))(conv6), conv3], axis=3)
conv7 = Conv2D(n_filters * 4, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(up7)
if bn:
conv7 = BatchNormalization()(conv7)
conv7 = Conv2D(n_filters * 4, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv7)
if bn:
conv7 = BatchNormalization()(conv7)
up8 = concatenate([UpSampling2D(size=(2, 2))(conv7), conv2], axis=3)
conv8 = Conv2D(n_filters * 2, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(up8)
if bn:
conv8 = BatchNormalization()(conv8)
conv8 = Conv2D(n_filters * 2, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv8)
if bn:
conv8 = BatchNormalization()(conv8)
up9 = concatenate([UpSampling2D(size=(2, 2))(conv8), conv1], axis=3)
conv9 = Conv2D(n_filters * 1, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(up9)
if bn:
conv9 = BatchNormalization()(conv9)
conv9 = Conv2D(n_filters * 1, (3, 3), activation='relu', padding = 'same', dilation_rate = dilation_rate)(conv9)
if bn:
conv9 = BatchNormalization()(conv9)
conv10 = Conv2D(10, (1, 1), activation='softmax', padding = 'same', dilation_rate = dilation_rate)(conv9)
model = Model(inputs=inputs, outputs=conv10)
return model
自定义函数:
def tversky_loss(y_true, y_pred):
alpha = 0.5
beta = 0.5
ones = K.ones(K.shape(y_true))
p0 = y_pred # proba that voxels are class i
p1 = ones-y_pred # proba that voxels are not class i
g0 = y_true
g1 = ones-y_true
num = K.sum(p0*g0, (0,1,2,3))
den = num + alpha*K.sum(p0*g1,(0,1,2,3)) + beta*K.sum(p1*g0,(0,1,2,3))
T = K.sum(num/den) # when summing over classes, T has dynamic range [0 Ncl]
Ncl = K.cast(K.shape(y_true)[-1], 'float32')
return Ncl-T
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*y_true_f) + K.sum(y_pred_f*y_pred_f) + smooth)
def dice_coef_loss(y_true, y_pred):
return 1.-dice_coef(y_true, y_pred)
构建模型后,当我尝试拟合此模型时,它给了我
AttributeError:“张量”对象没有属性“is_initialized”
解决方案
推荐阅读
- flutter - 本地化 jitsi_meet_flutter
- python - 熊猫四舍五入到最近的第一个月
- java - Spring Boot Client 调用由 OAuth2 保护的 REST API
- javascript - 使用 jQuery ajax 调用在 MVC 视图中绑定部分视图
- java - 使用 GrandID API 登录银行 ID - 瑞典
- sql - SQL Left Join 先匹配
- javascript - 如何避免访问远程服务器时请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - 将文件作为输入从一个 python 传递到另一个
- python - 自定义活动正则化器以使用拉普拉斯算子平滑输出
- amazon-web-services - 私有子网的 EMR 安全组的 Cloud Formation