#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), я не думаю, что этот код верен, откуда вы узнали, что эта активация была доступна?