Ошибка значения тензорного потока: Неизвестно функция активации: heaviside

#python #tensorflow #keras #deep-learning

Вопрос:

Я ОЧЕНЬ новичок в tensorflow и машинном обучении, но пытаюсь создать базовый классификатор, чтобы различать два типа изображений: здоровую клубнику и нездоровую клубнику.

Я ссылаюсь на код, который нашел в онлайн-учебнике, и изменяю его, чтобы он работал для моего проекта.

Я получаю следующую ошибку и не могу понять, как это решить.

 Traceback (most recent call last):
  File "D:/StrawberryPython/normalizer.py", line 197, in <module>
    model = vgg_build_model()
  File "D:/StrawberryPython/normalizer.py", line 117, in vgg_build_model
    m.add(layers.Dense(2, activation='heaviside'))
  File "D:StrawberryPythonvenvlibsite-packagestensorflowpythonkeraslayerscore.py", line 1161, in __init__
    self.activation = activations.get(activation)
  File "D:StrawberryPythonvenvlibsite-packagestensorflowpythonutildispatch.py", line 201, in wrapper
    return target(*args, **kwargs)
  File "D:StrawberryPythonvenvlibsite-packagestensorflowpythonkerasactivations.py", line 573, in get
    return deserialize(identifier)
  File "D:StrawberryPythonvenvlibsite-packagestensorflowpythonutildispatch.py", line 201, in wrapper
    return target(*args, **kwargs)
  File "D:StrawberryPythonvenvlibsite-packagestensorflowpythonkerasactivations.py", line 532, in deserialize
    return deserialize_keras_object(
  File "D:StrawberryPythonvenvlibsite-packagestensorflowpythonkerasutilsgeneric_utils.py", line 377, in deserialize_keras_object
    raise ValueError(
ValueError: Unknown activation function: heaviside
 

Вот соответствующий код. Опять же, это мой первый проект по машинному обучению, и я совершенно новичок в tensorflow, поэтому было бы очень полезно простое объяснение 🙂

 import numpy as np
import tensorflow
from tensorflow import keras
from tensorflow.keras import backend as K
from tensorflow.keras.preprocessing import image
import os
import sys
import random
import shutil
from os import listdir
from os.path import isfile, join
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.applications.resnet import ResNet50
from tensorflow.keras.applications.mobilenet import MobileNet
from tensorflow.keras import layers
from tensorflow.keras import Model
from tensorflow.keras import Sequential
from tensorflow.keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt
import json
import cv2

def vgg_build_model():
    set_trainable = False
    m = Sequential()
    conv_base = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
    for layer in conv_base.layers:
        if layer.name == 'block_conv1':
            set_trainable = True
        if set_trainable:
            layer.trainable = True
        else:
            layer.trainable = False
    m.add(conv_base)

    # Custom Shallow Dense Network
    m.add(layers.Flatten())
    m.add(layers.Dense(256, activation='relu'))
    m.add(layers.Dropout(0.5))
    m.add(layers.Dense(2, activation='heaviside'))
    return m

# Set up generators train_gen and val_gen
train_datagen = image.ImageDataGenerator(
    rotation_range=10,
    width_shift_range=0.1,
    height_shift_range=0.1,
    shear_range=0.1,
    zoom_range=0.1,
    horizontal_flip=True,
    fill_mode='nearest')

val_datagen = image.ImageDataGenerator()

dir_path = os.path.dirname(os.path.realpath(__file__))
train_dir = os.path.join(dir_path, 'training')
val_dir = os.path.join(dir_path, 'validation')

train_gen = train_datagen.flow_from_directory(
    train_dir,
    target_size=(224, 224),
    batch_size=32,
    class_mode='binary')

val_gen = val_datagen.flow_from_directory(
    val_dir,
    target_size=(224, 224),
    batch_size=32,
    class_mode='binary')

# Establish a callback for overfitting detection
es = EarlyStopping(monitor='val_acc', mode='max', verbose=0)
callback_list = [es]


# VGG16 Model
# Build the model and train using train_gen and val_gen
model = vgg_build_model()
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])

# Train the model using the generator
history = model.fit_generator(train_gen,
                              steps_per_epoch=100,
                              epochs=10,
                              validation_data=val_gen,
                              callbacks=callback_list,
                              validation_steps=32)
model.save('vgg1_strawberry.h5')
 

Комментарии:

1. У TensorFlow/Keras нет активации с таким именем (heaviside), я не думаю, что этот код верен, откуда вы узнали, что эта активация была доступна?