所以我正在尝试制作一个如何使用tensorflow的微型示例:
这是我的数据:
train_images = numpy.array([[1,1,1],[2,2,2],[3,3,3],[1,2,2],[2,1,3],[3,21]])
主要目标是发现每个数组的第一个数字等于标签。
这是我的代码:
import tensorflow as tf
from tensorflow import keras
import numpy
model = keras.Sequential([
keras.layers.Flatten(input_shape=(3, 3)),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
class_names = ['chiffre 1',' chiffre 2',' chiffre 3']
train_images = numpy.array([[1,1,1],[2,2,2],[3,3,3],[1,2,2],[2,1,3],[3,21]])
train_labels = numpy.array(['1','2','3','1','2','3'])
model.fit(train_images, train_labels, epochs=5)
test_images =numpy.array([[1,1,1],[2,2,2],[3,3,3],[1,2,2]])
test_labels = numpy.array(['1','2','3','1'])
test_loss, test_acc = model.evaluate(test_images, test_labels)
test_image =numpy.array([[1,1,1]])
predictions = model.predict(test_image)
pred = numpy.argmax(predictions[0])
print(pred)
print(class_names[pred])
print(predictions)
#print('Test accuracy:', test_acc)
我知道这行是错误的:
keras.layers.Flatten(input_shape=(3, 3)),
但是如何使其正确? 问候
答案 0 :(得分:2)
从删除Flatten图层开始,您的数据点是1d向量,将1d向量展平是没有意义的。
model = keras.Sequential([
keras.layers.Dense(128, activation=tf.nn.relu , input_shape=(3,)),
keras.layers.Dense(3, activation=tf.nn.softmax)])
第一个密集层需要三个输入,这是每个数据点的大小。
由于存在三类,我们也需要更改第二层的输出形状。
train_labels = numpy.array([0,1,2,0,1,2])
test_labels = numpy.array([0,1,2,0])
sparse_categorical_crossentropy损失函数期望训练和测试标签的范围为[0,3)。因此我们将1映射为0,2映射为1并将3映射为2。
建模,运行并学习这些更改,我建议增加时期数,因为您的数据非常有限。