日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模拟猫狗大战_tensorflow实现猫狗大战(分类算法)-阿里云开发者社区

發布時間:2024/9/27 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模拟猫狗大战_tensorflow实现猫狗大战(分类算法)-阿里云开发者社区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from __future__ importabsolute_importfrom __future__ importdivisionfrom __future__ importprint_functionimportosimporttensorflow as tf

flags=tf.app.flags

flags.DEFINE_integer(flag_name='batch_size', default_value=16, docstring='Batch 大小')

flags.DEFINE_string(flag_name='data_dir', default_value='./tfrecords', docstring='數據存放位置')

flags.DEFINE_string(flag_name='model_dir', default_value='./cat&dog_model', docstring='模型存放位置')

flags.DEFINE_integer(flag_name='steps', default_value=1000, docstring='訓練步數')

flags.DEFINE_integer(flag_name='classes', default_value=2, docstring='類別數量')

FLAGS=flags.FLAGS

MODES=[tf.estimator.ModeKeys.TRAIN, tf.estimator.ModeKeys.EVAL, tf.estimator.ModeKeys.PREDICT]def input_fn(mode, batch_size=1):"""輸入函數"""

defparser(serialized_example):"""如何處理數據集中的每一個數據"""

#解析單個example對象

features =tf.parse_single_example(

serialized_example,

features={'image/height': tf.FixedLenFeature([], tf.int64),'image/width': tf.FixedLenFeature([], tf.int64),'image/depth': tf.FixedLenFeature([], tf.int64),'image/encoded': tf.FixedLenFeature([], tf.string),'image/class/label': tf.FixedLenFeature([], tf.int64),

})#獲取參數

height = tf.cast(features['image/height'], tf.int32)

width= tf.cast(features['image/width'], tf.int32)

depth= tf.cast(features['image/depth'], tf.int32)#還原image

image = tf.decode_raw(features['image/encoded'], tf.float32)

image=tf.reshape(image, [height, width, depth])

image= image - 0.5

#還原label

label = tf.cast(features['image/class/label'], tf.int32)returnimage, tf.one_hot(label, FLAGS.classes)if mode inMODES:

tfrecords_file= os.path.join(FLAGS.data_dir, mode + '.tfrecords')else:raise ValueError("Mode 未知")assert tf.gfile.Exists(tfrecords_file), ('TFRrecords 文件不存在')#創建數據集

dataset =tf.data.TFRecordDataset([tfrecords_file])#創建映射

dataset = dataset.map(parser, num_parallel_calls=1)#設置batch

dataset =dataset.batch(batch_size)#如果是訓練,那么就永久循環下去

if mode ==tf.estimator.ModeKeys.TRAIN:

dataset=dataset.repeat()#創建迭代器

iterator =dataset.make_one_shot_iterator()#獲取 feature 和 label

images, labels =iterator.get_next()returnimages, labelsdefmy_model(inputs, mode):"""寫一個網絡"""net= tf.reshape(inputs, [-1, 224, 224, 1])

net= tf.layers.conv2d(net, 32, [3, 3], padding='same', activation=tf.nn.relu)

net= tf.layers.max_pooling2d(net, [2, 2], strides=2)

net= tf.layers.conv2d(net, 32, [3, 3], padding='same', activation=tf.nn.relu)

net= tf.layers.max_pooling2d(net, [2, 2], strides=2)

net= tf.layers.conv2d(net, 64, [3, 3], padding='same', activation=tf.nn.relu)

net= tf.layers.conv2d(net, 64, [3, 3], padding='same', activation=tf.nn.relu)

net= tf.layers.max_pooling2d(net, [2, 2], strides=2)#print(net)

net = tf.reshape(net, [-1, 28 * 28 * 64])

net= tf.layers.dense(net, 1024, activation=tf.nn.relu)

net= tf.layers.dropout(net, 0.4, training=(mode ==tf.estimator.ModeKeys.TRAIN))

net=tf.layers.dense(net, FLAGS.classes)returnnetdefmy_model_fn(features, labels, mode):"""模型函數"""

#可視化輸入

tf.summary.image('images', features)#創建網絡

logits =my_model(features, mode)

predictions={'classes': tf.argmax(input=logits, axis=1),'probabilities': tf.nn.softmax(logits, name='softmax_tensor')

}#如果是PREDICT,那么只需要predictions就夠了

if mode ==tf.estimator.ModeKeys.PREDICT:return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)#創建Loss

loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits, scope='loss')

tf.summary.scalar('train_loss', loss)#設置如何訓練

if mode ==tf.estimator.ModeKeys.TRAIN:

optimizer= tf.train.AdamOptimizer(learning_rate=1e-3)

train_op=optimizer.minimize(loss, tf.train.get_or_create_global_step())else:

train_op=None#獲取訓練精度

accuracy =tf.metrics.accuracy(

tf.argmax(labels, axis=1), predictions['classes'],

name='accuracy')

accuracy_topk=tf.metrics.mean(

tf.nn.in_top_k(predictions['probabilities'], tf.argmax(labels, axis=1), 2),

name='accuracy_topk')

metrics={'test_accuracy': accuracy,'test_accuracy_topk': accuracy_topk

}#可視化訓練精度

tf.summary.scalar('train_accuracy', accuracy[1])

tf.summary.scalar('train_accuracy_topk', accuracy_topk[1])returntf.estimator.EstimatorSpec(

mode=mode,

predictions=predictions,

loss=loss,

train_op=train_op,

eval_metric_ops=metrics)defmain(_):#監視器

logging_hook =tf.train.LoggingTensorHook(

every_n_iter=100,

tensors={'accuracy': 'accuracy/value','accuracy_topk': 'accuracy_topk/value','loss': 'loss/value'},

)#創建 Estimator

model =tf.estimator.Estimator(

model_fn=my_model_fn,

model_dir=FLAGS.model_dir)for i in range(20):#訓練

model.train(

input_fn=lambda: input_fn(tf.estimator.ModeKeys.TRAIN, FLAGS.batch_size),

steps=FLAGS.steps,

hooks=[logging_hook])#測試并輸出結果

print("=" * 10, "Testing", "=" * 10)

eval_results=model.evaluate(

input_fn=lambda: input_fn(tf.estimator.ModeKeys.EVAL))print('Evaluation results:\n\t{}'.format(eval_results))print("=" * 30)if __name__ == '__main__':

tf.logging.set_verbosity(tf.logging.INFO)

tf.app.run()

總結

以上是生活随笔為你收集整理的python模拟猫狗大战_tensorflow实现猫狗大战(分类算法)-阿里云开发者社区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。