【发布时间】:2021-10-02 20:49:51
【问题描述】:
我在 phyton 中使用 keras 来完成我在神经元网络中的第一步。 我训练了一个模型来识别 30px x 30px 的小图像。
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.python.keras import Sequential
train_ds = keras.preprocessing.image_dataset_from_directory('images', validation_split=0.2,
subset="training", seed=123, batch_size=32, image_size=(30, 30))
val_ds = keras.preprocessing.image_dataset_from_directory('images', validation_split=0.2,
subset="validation", seed=123, batch_size=32, image_size=(30, 30))
class_names = train_ds.class_names
print(class_names)
AUTOTUNE = tf.data.experimental.AUTOTUNE
train_ds = train_ds.cache().prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)
num_classes = 13
model = Sequential([
layers.experimental.preprocessing.Rescaling(1./255, input_shape=(30, 30, 3)),
layers.Conv2D(10, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(15, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(20, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Dropout(0.2),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(num_classes)
])
model.compile(
optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.summary()
epochs = 50
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=epochs
)
model.save("model.h5")
我对此很满意,因为我的 val_accuracy 为 0.9912。
但现在我想使用Java中的模型对缓冲图像进行分类:
public class Test
{
public static void main(String[] args) throws Exception
{
MultiLayerNetwork model = KerasModelImport.importKerasSequentialModelAndWeights("ki.h5");
BufferedImage img = ImageIO.read(new File("testImage.png"));
ImageLoader loader = new ImageLoader(30, 30, 3);
INDArray input = loader.asMatrix(img);
INDArray output = model.output(input);
System.out.println("Test " + output);
}
}
在这里我收到此错误:
线程“main”中的异常 org.deeplearning4j.nn.modelimport.keras.exceptions.UnsupportedKerasConfigurationException: 不支持的 keras 图层类型重新缩放。请在以下位置提出问题 https://github.com/eclipse/deeplearning4j/issues.
我通过删除 Rescaling Layer 让它在 phython 中工作。但后来我得到了例外
未知的 Keras 损失函数 sparsecategoricalcrossentropy。请在https://github.com/eclipse/deeplearning4j/issues 提出问题。
我愿意接受任何建议。有没有更好的方法来使用 java 中的模型?
或者我应该更改我的 python 文件中的某些内容或我如何保存模型?
【问题讨论】:
标签: python java tensorflow keras deeplearning4j