Tensorflow 提高测试准确性
Tensorflow Increase Test Accuracy
各位,我是tensorflow新手,刚开始学才2天。我按照tensorflow的步骤制作,注意代码的含义。之后我尝试做类似的项目,就像我在 tensorflow 教程中所做的那样。
由于刚好2天,尝试做了一个图片分类。但是测试结果的准确性太差,没有做出真正的评价。
能否请您指导,教我如何改进此代码或我应该学习什么来改进此代码...
备注:
-我在colabs.google做了项目(你可以在这里复制代码试试)
-我取过的数据集===> https://www.cs.toronto.edu/~kriz/cifar.html
这是我的代码:
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
(train_i, train_l), (test_i, test_l) = tf.keras.datasets.cifar10.load_data()
classnames = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model = keras.Sequential([
keras.layers.Flatten(),
keras.layers.Dense(100, activation='relu'), #burada kaç tane node olacağını belirtiyoruz yani mesela burada 108 se 108 tane node vardır. Node sayısını arrtırdıkça işlem hızımız düşüyor ama tahmin değerlerimiz gerçeğe daha yakın oluyor.
keras.layers.Dense(10) #burada ise 10 diyoruz çünkü 10 tane class içinden seçecek.
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(train_i, train_l, epochs=100)
test_loss, test_acc = model.evaluate(test_i, test_l, verbose=2)
print(test_acc)
prediction = tf.keras.Sequential([model, tf.keras.layers.Softmax()]).predict(test_i)
i = 90
prediction[i]
prediction_made= np.argmax(prediction[i])
f= train_l[i]
s=str(train_l[i])
print(str(s)[1:-1])
b = int(str(s)[1:-1])
y = classnames[b]
x = classnames[prediction_made]
img = train_i
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(img[i])
plt.xlabel('The True Label is ' + repr(y) +
', and The Predicted Label is ' + repr(x) + '...')
你的'model'被证明了两次。
- models.Sequential() ...
- 模型 = keras.Sequential(...)
因此第一部分未包含在最终 'model' 中。
像这样修改模型部分代码
model = keras.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32 ,3)),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Flatten(),
keras.layers.Dense(100, activation='relu'),
keras.layers.Dense(10)
])
各位,我是tensorflow新手,刚开始学才2天。我按照tensorflow的步骤制作,注意代码的含义。之后我尝试做类似的项目,就像我在 tensorflow 教程中所做的那样。
由于刚好2天,尝试做了一个图片分类。但是测试结果的准确性太差,没有做出真正的评价。
能否请您指导,教我如何改进此代码或我应该学习什么来改进此代码...
备注: -我在colabs.google做了项目(你可以在这里复制代码试试) -我取过的数据集===> https://www.cs.toronto.edu/~kriz/cifar.html
这是我的代码:
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
(train_i, train_l), (test_i, test_l) = tf.keras.datasets.cifar10.load_data()
classnames = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model = keras.Sequential([
keras.layers.Flatten(),
keras.layers.Dense(100, activation='relu'), #burada kaç tane node olacağını belirtiyoruz yani mesela burada 108 se 108 tane node vardır. Node sayısını arrtırdıkça işlem hızımız düşüyor ama tahmin değerlerimiz gerçeğe daha yakın oluyor.
keras.layers.Dense(10) #burada ise 10 diyoruz çünkü 10 tane class içinden seçecek.
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(train_i, train_l, epochs=100)
test_loss, test_acc = model.evaluate(test_i, test_l, verbose=2)
print(test_acc)
prediction = tf.keras.Sequential([model, tf.keras.layers.Softmax()]).predict(test_i)
i = 90
prediction[i]
prediction_made= np.argmax(prediction[i])
f= train_l[i]
s=str(train_l[i])
print(str(s)[1:-1])
b = int(str(s)[1:-1])
y = classnames[b]
x = classnames[prediction_made]
img = train_i
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(img[i])
plt.xlabel('The True Label is ' + repr(y) +
', and The Predicted Label is ' + repr(x) + '...')
你的'model'被证明了两次。
- models.Sequential() ...
- 模型 = keras.Sequential(...)
因此第一部分未包含在最终 'model' 中。
像这样修改模型部分代码
model = keras.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32 ,3)),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Flatten(),
keras.layers.Dense(100, activation='relu'),
keras.layers.Dense(10)
])