简单的tensorflow示例:

时间:2018-10-04 10:13:09

标签: python tensorflow keras

所以我正在尝试制作一个如何使用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)),

但是如何使其正确? 问候

1 个答案:

答案 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。

建模,运行并学习这些更改,我建议增加时期数,因为您的数据非常有限。